12.6. EntityManager の利用
/META-INF ディレクトリーに persistence.xml ファイルがある場合、エンティティーマネージャーはロードされ、データベースにアクティブに接続されます。EntityManager プロパティーを使用して、エンティティーマネージャーを JNDI にバインドし、エンティティーを追加、更新、削除、およびクエリーできます。
Hibernate でセキュリティーマネージャーの使用を計画している場合は、EntityManagerFactory が JBoss EAP サーバーによってブートストラップされている場合のみ Hibernate がサポートすることに注意してください。EntityManagerFactory または SessionFactory がアプリケーションによってブートストラップされている場合はサポートされません。セキュリティーマネージャーに関する詳細は、サーバーセキュリティーの設定方法 の 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;
}
}