1

私はjpaとjsfが初めてです。jpaとjsfを使って簡単なWebアプリを開発しようとしています。mysql をインストールし、それで動作するように Glassfish を構成しました。1 つのマネージド Bean と 1 つの JPA エンティティで構成される小さなプロジェクトを作成しました。展開中にテーブルがデータベースに正常に作成されたため、データベースへの接続は問題ありません。しかし、私には 1 つの問題があります。Managed Bean メソッドでエンティティを保持できません。

@ManagedBean(name = "data")
@SessionScoped
public class Data implements Serializable {

    @PersistenceUnit(unitName = "JChatPU")
    EntityManagerFactory emf;

    @Resource
    UserTransaction utx;

    public Data() {
    }

    public void add() {
        EntityManager em = emf.createEntityManager();
        try {
            utx.begin();
            JChatUser u = new JChatUser();
            em.persist(u);
            utx.commit();
        }
        catch(Exception ex) {
            ex.printStackTrace();
        }
    }
}

persistence.xml での永続ユニットの構成:

  <persistence-unit name="JChatPU" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/jchatdb</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
    </properties>
  </persistence-unit>

しかし、EJB から正常に永続化できます。では、マネージド Bean のメソッドから永続化するにはどうすればよいでしょうか。

今後とも回答よろしくお願いします。

4

1 に答える 1