Dobrý den,

tento problém nastává pokud odpojíte session, s objekty dále pracujete a přistoupíte k nějakému prvku (obvykle další objekt v relaci) a session není k dispozici.

Máte tyto možnosti:
- načíst data před zavřením cache:
    - musíte přistoupit ke všemu co chcete používat ještě před uzavřením session
    - v service.findStock nepoužívat session.load, ale session.get. Session.load předpokládá, že objekt existuje a tak jej vůbec nenačítá (prostě  vrátí CGLIB proxy, která objekt načte až při prvním přístupu). Toto je IMHO Váš přístup. Problém ale nastane při přístupu k něčemu v relaci,
    - nepoužívat Lazy čtení - nedoporučuji - při prvním přístupu k objektu se načte všechno na co má relaci
- zavírat session až po na konci akce. Tj. váš service.findStockItemById() nebude vytvářet session, ale použije existující. U složitějších aplikací je lepší použít JTA prostředí (API pro obecné (a i distribuované) transakce)

S pozdravem

Petr Ferschmann

Petr Gola píše v So 13. 05. 2006 v 12:40 +0200:
Zdravim,

mam nasledujici klientsky kod komunikujici se spring aplikacni vrstvou
(pomoci Spring's HTTP Invoking).

public class MyTest {
  public static void main(String[] args) {
    System.out.println(args[0]);
    XmlBeanFactory beanFactory = new XmlBeanFactory(new
FileSystemResource(args[0]));
    IStockItemService service = (IStockItemService)
beanFactory.getBean("myservice");

    System.out.println("find item by id 5:");
    StockItem item = service.findStockItemById(5);
    String str = null;
    str = ""+item.getId();
//    str += item.getDescription();
//    str += ""+item.getPrice();
    System.out.println(str);

    System.out.println("added item:");
    System.out.println(service.saveNewStockItem(new StockItem("Ahoj",29)));

    System.out.println("all items:");
    List list = service.getStockItemList(null);
    for (Object o : list) System.out.println(o);
  }
}

takhle probehne vse v poradku. Ale pokud se snazim zavolat metody
objektu item getDescription() ci getPrice(), vyskoci nasledujici
chybova hlaska:

find item by id 5:
(hibernate.LazyInitializationException 19  ) could not initialize
proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy
- no Session
        at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:53)
        at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:98)
        at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:158)
        at com.gola.cobra.bo.StockItem$$EnhancerByCGLIB$$975d2856.getDescription(<generated>)
        at com.gola.cobra.client.MyTest.main(MyTest.java:19)
Exception in thread "main" org.hibernate.LazyInitializationException:
could not initialize proxy - no Session
        at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:53)
        at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:98)
        at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:158)
        at com.gola.cobra.bo.StockItem$$EnhancerByCGLIB$$975d2856.getDescription(<generated>)
        at com.gola.cobra.client.MyTest.main(MyTest.java:19)
Petr Ferschmann

SoftEU s.r.o.
-----------------------------------
Sady Petatricatniku 31
301 00 Plzen
Czech Republic
-----------------------------------
Phone: +420 373 729 300
Fax:   +420 373 729 301
Cell:  +420 775 638 008

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Odpovedet emailem