Zdravim konferenciu,
prestudoval som si vsetky minule otazky v konferencii na temu lazy
loading, ale na postacujucu odpoved som nenarazil.
jedna sa o web aplikaciu, pouzivam Spring 2.5, Spring MVC, Acegi 1.0.6 a
Hibernate 3.2, DB je postgreSQL.
mam 2 objekty, napr. object House a objekt HouseUser.
public class HouseUser extends BaseObject implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator="seq_house_user")
private Long id;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "fk_house_id", referencedColumnName = "id",
nullable = false)
private House house;
...
}
public class House extends BaseObject {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator="seq_house")
private Long id;
private String name = null;
@OneToMany(mappedBy = "house", fetch = FetchType.LAZY, cascade =
CascadeType.ALL)
@JoinColumn(name = "fk_house_id")
private List<HouseUser> houseUsers;
....
}
teda je tam spojenie z House na HouseUser 1:N a spojenie HouseUser na
House 1:N.
kedze sa jedna o web aplikaciu, pre open session pouzivam presne podla
manualu Interceptor:
<beans>
<bean name="openSessionInViewInterceptor"
class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
<property name="singleSession">
<value>false</value>
</property>
</bean>
</beans>
po kode:
objekt House mam ulozeny v HttpSession, ziskavam ho z Acegi:
HouseUser houseUser = (HouseUser)
(SecurityContextHolder.getContext().getAuthentication().getPrincipal());
Long id = houseUser.getHouse().getId(); // <-- na tomto riadku
teda akokeby tam nebol "dotiahnuty" objekt House v objekt HouseUser.
dostavam chybu:
2008-01-12 22:04:11,235 ERROR LazyInitializationException - could not
initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy -
no Session
at
org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
at
org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
at
org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)
....
nemali ste niekto podobny problem ? je skutocne jedine mozne riesenie
nepouzit LAZY loading ?
dakujem
Ivan