Translated message

A translation of this page exists in English.

JBoss EAP においてトランザクション外のクエリで LazyInitializationException が発生する

Solution Unverified - Updated -

Issue

エンティティオブジェクトの中に別のオブジェクトがあり、さらにその中に別のオブジェクトがあるエンティティオブジェクトを取得する時に、begin および commit トランザクションを使用する必要があります。

この begin および commit は JBOSS のコミュニティエディションでは必要ありませんでした。これは、JBOSS EAP バージョンでのみ必要になります。

すべてのデータベースアクセスコードは、BEAN 管理トランザクションを使用した EJB 3.1 コンポーネントに含まれます。“@TransactionManagement(TransactionManagementType.BEAN)”

以下は、コードの抜粋になります。

    public List<User> getUsers(List<SearchCriteria> criteria, RequestOptions options)
            throws ServiceException
    {
        List<User> users = null;
        try{
            //begin();
              Query query = em.createQuery("select user from test.entity.User as user");
          List<?> resultset = query.getResultList();
          User user = (User) resultset.get(0);
              user.getRoles().size();
            //commit();
        } catch(Exception ex){
               rollback();
        }
        return users;
    }

begin または commit トランザクションを使用しない場合は、"user.getRoles()" をする際に "LazyInitializationException" が発生します。

Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.test.entity.User.roles, could not initialize proxy - no Session

Environment

  • Red Hat JBoss Enterprise Application Platform (EAP)
    • 6
      • Hibernate 4
    • 5
      • Hibernate 3

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content