12.6. 使用实体管理器
当您的 persistent .xml 文件位于 /META-INF 目录中时,将加载实体管理器并具有与数据库的有效连接。EntityManager 属性可用于将实体管理器绑定到 JNDI,以及添加、更新、删除和查询实体。
重要
如果您计划将安全管理器与 Hibernate 一起使用,请注意,Hibernate 仅在 JBoss EAP 服务器引导 实体管理器Factory 时支持它。当应用程序引导 EntityManagerFactory 或 SessionFactory 时不支持它。有关安全 管理器的更多信息,请参阅 如何配置服务器安全性的 Java 安全 管理器。
12.6.1. 将实体管理器绑定到 JNDI
默认情况下,JBoss EAP 不将 EntityManagerFactory 绑定到 JNDI。您可以通过设置 jboss.entity.manager 文件中显式配置此配置。此属性的值应当是您要将 .factory.jndi.name 属性,在应用的 persistence. xmlEntityManagerFactory 绑定到的 JNDI 名称。
您还可以使用 jboss.entity.manager.jndi.name 属性将容器管理的事务范围实体管理器绑定到 JNDI。
示例:将 实体管理器 和 EntityManagerFactory 绑定到 JNDI
<property name="jboss.entity.manager.jndi.name" value="java:/MyEntityManager"/> <property name="jboss.entity.manager.factory.jndi.name" value="java:/MyEntityManagerFactory"/>
示例:使用实体 管理器保存实体
public User createUser(User user) {
entityManager.persist(user);
return user;
}
示例:使用实体 管理器更新实体
public void updateUser(User user) {
entityManager.merge(user);
}
示例:使用实体 管理器删除实体
public void deleteUser(String user) {
User user = findUser(username);
if (user != null)
entityManager.remove(user);
}
示例:使用实体 管理器查询实体
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;
}
}