Hi there,
I have the following setup in my development environment:
- Spring 3
- Spring Data JPA - using repositories
- JPA-Hibernate
I am trying out the XXXToOne lazy initialization workaround located at http://justonjava.blogspot.com/2010/...e-to-many.html. Here is an example of one of my entities:
Code:
@Entity
@Table(name = "PLAYER_SPOUSE")
public class PlayerSpouse extends BaseEntity implements FieldHandled {
private static final long serialVersionUID = 1L;
private FieldHandler fieldHandler;
@Column(name = "NAME")
private String name;
@OneToOne(fetch = FetchType.LAZY, optional = true, mappedBy = "playerSpouse")
@LazyToOne(LazyToOneOption.NO_PROXY)
private Player player;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Player getPlayer() {
if (fieldHandler != null) {
return (Player) fieldHandler.readObject(this, "player", player);
}
return player;
}
public void setPlayer(Player player) {
if (fieldHandler != null) {
this.player = (Player) fieldHandler.writeObject(this, "player",
this.player, player);
return;
}
this.player = player;
}
@Override
public void setFieldHandler(FieldHandler handler) {
fieldHandler = handler;
}
@Override
public FieldHandler getFieldHandler() {
return fieldHandler;
}
}
However, I cannot get it to work in my environment using Spring Data JPA repositories as I am encountering an error in "org.hibernate.LazyInitializationException: session is not connected" when I attempt to get a Player from a PlayerSpouse object.
Here is my offending code:
Code:
PlayerSpouse findByName = playerSpouseRepository.findByName("Toni");
findByName.getPlayer(); // error
Here is my stack trace:
Code:
SEVERE: org.hibernate.LazyInitializationException: session is not connected
at org.hibernate.bytecode.instrumentation.spi.AbstractFieldInterceptor.intercept(AbstractFieldInterceptor.java:89)
at org.hibernate.bytecode.instrumentation.internal.javassist.FieldInterceptorImpl.readObject(FieldInterceptorImpl.java:98)
When I tried it out with plain Hibernate however, it works perfectly:
Code:
SessionFactory sf = sessionFactory;
Session openSession = sf.openSession();
Object ps = openSession.get(PlayerSpouse.class, 6L);
if (ps instanceof PlayerSpouse) {
PlayerSpouse ps1 = (PlayerSpouse) ps;
ps1.getPlayer(); // works
}
openSession.close();
Can anybody help me with this? Thanks!