Fail to get the related entity ID for a Lazy ManyToOne Relat
pkap Jan 12, 2006 10:43 AMHi all,
I have two entities, City and Country, with accessType=AccessType.FIELD, having ManyToOne relationship:
COUNTRY ENTITY BEAN
package test.entity.bean; import javax.persistence.*; @Entity(access=AccessType.FIELD) @Table(name = "COUNTRY") public class Country implements java.io.Serializable { @Id @Column(name="ID") private int id; @Column(name="NAME") private String name; public int getId() { return this.id; } public void setId(int id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } }
CITY ENTITY BEAN
package test.entity.bean; import javax.persistence.*; @Entity(access=AccessType.FIELD) @Table(name = "CITY") public class City implements java.io.Serializable { @Id @Column(name="ID") private int id; @Column(name="NAME") private String name; @ManyToOne( targetEntity=Country.class, fetch=FetchType.LAZY ) @JoinColumn(name = "COUNTRY", nullable = true) private Country country; public City() {} public int getId() { return this.id; } public void setId(int id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Country getCountry() { return this.country; } public void setCountry(Country country) { this.country = country; } }
and a client that reads city.id, city.name and city.countryId only:
REMOTE CLIENT
... City city = sb.getCity(cityId); System.out.println(city.getId()); System.out.println(city.getName()); System.out.println(city.getCountry().getId()); // <-- throws LazyInitializationException ...
So, when I try to access city.getCountry().getId() from remote client, I get a
org.hibernate.LazyInitializationException: could not initialize proxy - no Session Exception
The strange thing is that, if I change the entity beans accessType to AccessType.PROPERTY, then this example seems to work fine!
So my question is:
- Is this the right way to get the ID from a related entity bean in a Lazy relationship?
- If yes, why doesn't it work for AccessType=FIELD entity beans? Is it a bug?
- If no, which is the right way to do it? (of course, loading the entire related entity is not an option, since my real classes are much more complicated. I just want to get the related entity's ID only)
Note: I have some reasons to use AccessType=FIELD, so changing my EntityBeans to AccessType=PROPERTY is not an option either