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; } }