You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Heath Thomann (JIRA)" <ji...@apache.org> on 2014/10/14 02:03:33 UTC
[jira] [Updated] (OPENJPA-2536) FetchGroup is not returning lazy
fields.
[ https://issues.apache.org/jira/browse/OPENJPA-2536?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Heath Thomann updated OPENJPA-2536:
-----------------------------------
Description:
I have found an issue with FetchGroups not returning 'lazy' fields. To describe, take this entity:
@Entity
@FetchGroup(name = "HardwareSimple", attributes = { @FetchAttribute(name = "status"),
@FetchAttribute(name = "statusActive") })
public class HardwareStatus implements Serializable {
@Id
private String status;
private String statusActive;
private String condition;
private int connection;
...............
With this Entity, take the following scenario:
OpenJPAEntityManager openJpaEm = OpenJPAPersistence.cast(em);
openJpaEm.getFetchPlan().resetFetchGroups().removeFetchGroup("default").addFetchGroups("HardwareSimple");
HardwareStatus h1 = em.find(HardwareStatus.class, "Lost");
//h1.status contains "Lost" in the db.
assertEquals("Lost",h1.getStatus()); //this assert passes
//h1.connection contains '2' in the db.
assertEquals(2, h1.getConnection()); //this assert fails, 0 is returned by the getter.
//h1.condition contains "Used" in the db.
assertEquals("Used", h1.getCondition()); //this assert fails, null is returned by the getter.
The latter two h1.get* do not return the correct values. These fields are 'lazy' (i.e. not part of the FetchGroup) but should be fetched when requested. See the attached test for full details.
Thanks,
Heath
was:
I have found an issue with FetchGroups not returning 'lazy' fields. To describe, take this entity:
@Entity
@FetchGroup(name = "HardwareSimple", attributes = { @FetchAttribute(name = "status"),
@FetchAttribute(name = "statusActive") })
public class HardwareStatus implements Serializable {
@Id
private String status;
private String statusActive;
private String condition;
private int connection;
...............
OpenJPAEntityManager openJpaEm = OpenJPAPersistence.cast(em);
openJpaEm.getFetchPlan().resetFetchGroups().removeFetchGroup("default").addFetchGroups("HardwareSimple");
HardwareStatus h1 = em.find(HardwareStatus.class, "Lost");
//h1.status contains "Lost" in the db.
assertEquals("Lost",h1.getStatus()); //this assert passes
//h1.connection contains '2' in the db.
assertEquals(2, h1.getConnection()); //this assert fails
//h1.condition contains "Used" in the db.
assertEquals("Used", h1.getCondition()); //this assert fails
The latter two h1.get* returns null. These fields are 'lazy' (i.e. not part of the FetchGroup) but should be fetched when requested. See the attached test for full details.
Thanks,
Heath
> FetchGroup is not returning lazy fields.
> ----------------------------------------
>
> Key: OPENJPA-2536
> URL: https://issues.apache.org/jira/browse/OPENJPA-2536
> Project: OpenJPA
> Issue Type: Bug
> Components: kernel
> Affects Versions: 2.1.2, 2.2.1.1, 2.2.3, 2.3.0, 2.4.0
> Reporter: Heath Thomann
> Priority: Minor
>
> I have found an issue with FetchGroups not returning 'lazy' fields. To describe, take this entity:
> @Entity
> @FetchGroup(name = "HardwareSimple", attributes = { @FetchAttribute(name = "status"),
> @FetchAttribute(name = "statusActive") })
> public class HardwareStatus implements Serializable {
> @Id
> private String status;
> private String statusActive;
> private String condition;
> private int connection;
> ...............
> With this Entity, take the following scenario:
> OpenJPAEntityManager openJpaEm = OpenJPAPersistence.cast(em);
> openJpaEm.getFetchPlan().resetFetchGroups().removeFetchGroup("default").addFetchGroups("HardwareSimple");
> HardwareStatus h1 = em.find(HardwareStatus.class, "Lost");
> //h1.status contains "Lost" in the db.
> assertEquals("Lost",h1.getStatus()); //this assert passes
> //h1.connection contains '2' in the db.
> assertEquals(2, h1.getConnection()); //this assert fails, 0 is returned by the getter.
> //h1.condition contains "Used" in the db.
> assertEquals("Used", h1.getCondition()); //this assert fails, null is returned by the getter.
> The latter two h1.get* do not return the correct values. These fields are 'lazy' (i.e. not part of the FetchGroup) but should be fetched when requested. See the attached test for full details.
> Thanks,
> Heath
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)