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


Odpovedet emailem