12.6. EntityManager の利用
/META-INF
ディレクトリーに persistence.xml
ファイルがある場合、エンティティーマネージャーはロードされ、データベースにアクティブに接続されます。EntityManager
プロパティーを使用して、エンティティーマネージャーを JNDI にバインドし、エンティティーを追加、更新、削除、およびクエリーできます。
Hibernate でセキュリティーマネージャーの使用を計画している場合は、EntityManagerFactory
が JBoss EAP サーバーによってブートストラップされている場合のみ Hibernate がサポートすることに注意してください。EntityManagerFactory
または SessionFactory
がアプリケーションによってブートストラップされている場合はサポートされません。セキュリティーマネージャーに関する詳細は、How to Configure Server Security のJava Security Managerを参照してください。
12.6.1. EntityManager の JNDI へのバインディング
デフォルトでは、JBoss EAP は EntityManagerFactory
を JNDI にバインドしません。jboss.entity.manager.factory.jndi.name
プロパティーを設定すると、アプリケーションの persistence.xml
ファイルでこれを明示的に設定できます。このプロパティーの値は、EntityManagerFactory
をバインドする JNDI の名前にする必要があります。
また、jboss.entity.manager.jndi.name
プロパティーを使用すると、コンテナー管理でトランザクションスコープのエンティティーマネージャーを JNDI にバインドすることもできます。
例: EntityManager
および EntityManagerFactory
の JNDI へのバインド
<property name="jboss.entity.manager.jndi.name" value="java:/MyEntityManager"/> <property name="jboss.entity.manager.factory.jndi.name" value="java:/MyEntityManagerFactory"/>
例: EntityManager
を使用したエンティティーの格納
public User createUser(User user) { entityManager.persist(user); return user; }
例: EntityManager
を使用したエンティティーの更新
public void updateUser(User user) { entityManager.merge(user); }
例: EntityManager
を使用したエンティティーの削除
public void deleteUser(String user) { User user = findUser(username); if (user != null) entityManager.remove(user); }
例: EntityManager
を使用したエンティティーのクエリー
public User findUser(String username) { CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery<User> criteria = builder.createQuery(User.class); Root<User> root = criteria.from(User.class); TypedQuery<User> query = entityManager .createQuery(criteria.select(root).where( builder.equal(root.<String> get("username"), username))); try { return query.getSingleResult(); } catch (NoResultException e) { return null; } }