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 및 EntityManager Factory 를 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;
    }
}