12.6. 使用实体管理器

当您的 persistent .xml 文件位于 /META-INF 目录中时,将加载实体管理器并具有与数据库的有效连接。EntityManager 属性可用于将实体管理器绑定到 JNDI,以及添加、更新、删除和查询实体。

重要

如果您计划将安全管理器与 Hibernate 一起使用,请注意,Hibernate 仅在 JBoss EAP 服务器引导 实体管理器Factory 时支持它。当应用程序引导 EntityManagerFactorySessionFactory 时不支持它。 有关安全管理器的更多信息,请参阅如何配置服务器安全性的 Java 安全管理器

12.6.1. 将实体管理器绑定到 JNDI

默认情况下,JBoss EAP 不将 EntityManagerFactory 绑定到 JNDI。您可以通过设置 jboss.entity.manager .factory.jndi.name 属性,在应用的 persistence. xml 文件中显式配置此配置。此属性的值应当是您要将 EntityManagerFactory 绑定到的 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;
    }
}