12.6. EntityManager 작업
/META-INF 디렉터리에 persistence.xml 파일이 있으면 엔터티 관리자가 로드되고 데이터베이스에 대한 활성 연결이 있습니다. EntityManager 속성을 사용하여 엔터티 관리자를 JNDI에 바인딩하고 엔터티를 추가, 업데이트, 제거 및 쿼리할 수 있습니다.
Hibernate와 함께 보안 관리자를 사용하려면 EntityManagerFactory 가 JBoss EAP 서버에서 부트스트랩된 경우에만 Hibernate가 이를 지원합니다. 애플리케이션에서 EntityManagerFactory 또는 를 부트스트랩하는 경우 지원되지 않습니다. 보안 관리자에게 대한 자세한 내용은 How to Configure Server Security (서버 보안 구성 방법)에서 Java Security Manager 를 참조하십시오.
SessionFactory
12.6.1. EntityManager를 JNDI에 바인딩
기본적으로 JBoss EAP는 EntityManagerFactory 를 JNDI에 바인딩하지 않습니다. jboss.entity.manager.factory 파일에서 이를 명시적으로 구성할 수 있습니다. 이 속성의 값은 .jndi.name 속성을 설정하여 애플리케이션의 persistence. xmlEntityManagerFactory 를 바인딩하려는 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;
}
}