@ManyToOneを使って、そして時間を延ばして、問題をロードして、まとめを解決します.

2044 ワード

HIBERNATEのコメントを使って@ManyToOne(fetch=FetchType.lazy)を出した時、エラーが発生しました.

org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
at com.evolution.warlock.entity.Department_$$_javassist_1.getName(Department_$$_javassist_1.java)
at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doSingleRealmAuthentication(ModularRealmAuthenticator.java:180)
at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doAuthenticate(ModularRealmAuthenticator.java:267)
at org.apache.shiro.authc.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:198)
   答えを探しました.

fetch=FetchType.LAZY          ,Hibernate  get                              , load   ,       load(id),       Hibernate    (                  ),     id       (getter,setter  ),  id       (       load       ), session       ,     id         sql     ,            session       load()       id  ,  Hibernate      session sql  ,   session    ,      。
   確かに上記の通りです.LAZYはID以外のすべてのアクセスを遮断していますので、解決方法はたくさんあります.
   IDだけ取って、もう一度データベースから必要なものを取ります.
   二.Fetch Type.lazyをEAGERに変更する
   三.配置xml(試したことがない)

<filter>
  <filter-name>openSessionInView</filter-name>
  <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>openSessionInView</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
   四.service層で、ハイビスカス.initialize()を使って、あなたが必要とする対象を新たに永続化します.
   五.MVCに配置すると、個人的にはこの方法がいいと思います.