Hello,
I have a strange problem to retrieve an Entity by ID from the EntityManager using its find() method:
Code:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Owner {
Long id;
@Id
@GeneratedValue
public Long getId() {
return id;
}
...
}
@Entity
public class DmsUser extends Owner {
...
}
There is one DmsUser persisted with id 3, all tables are generated automatically, no caches enabled, MySql, Hibernate 3.2.0.cr3
If i use
Code:
1.: DmsUser user = EntityManager.find(DmsUser.class, new Long(3))
returns NULL !
but
Code:
2.: DmsUser user = (DmsUser) EntityManager.find(Owner.class, new Long(3))
works.
The two executed SQL Queries differ a lot. If I change InheritanceType.JOINED to InheritanceType.SINGLE_TABLE the first example works again.
Is this the expected behavior of InheritanceType.JOINED and EntityManager.find that I have to pass the superclass there ?
Thank you, frobb
---- sql trace from example 1 ----
Code:
DEBUG [SQL]: select dmsuser0_.id as id0_0_, dmsuser0_1_.name as name0_0_, dmsuser0_.password as password1_0_, dmsuser0_.groupName as groupName1_0_, dmsuser0_.description as descript4_1_0_ from DmsUser dmsuser0_ inner join Owner dmsuser0_1_ on dmsuser0_.id=dmsuser0_1_.id where dmsuser0_.id=?
---- sql trace from example 2 ----
Code:
DEBUG [SQL]: select owner0_.id as id0_0_, owner0_.name as name0_0_, owner0_1_.password as password1_0_, owner0_1_.groupName as groupName1_0_, owner0_1_.description as descript4_1_0_, case when owner0_1_.id is not null then 1 when owner0_2_.id is not null then 2 when owner0_.id is not null then 0 end as clazz_0_ from Owner owner0_ left outer join DmsUser owner0_1_ on owner0_.id=owner0_1_.id left outer join USER_GROUP owner0_2_ on owner0_.id=owner0_2_.id where owner0_.id=?