나는 다음과 같은 것을 고민하고있다 : 는 PersistenceContext 및 EJB 트랜잭션 경계
내가이 엔터티에 대한 저장소로 상태가없는 빈을 가지고,이 빈은 엔티티 관리자는 선언했다.다른 stateless bean에서이 bean을 호출 할 때 엔티티가 리턴 된 다음이 새로운 리턴 된 엔티티에서 릴레이션을 호출하면 "org.hibernate.LazyInitializationException : 예외 콜을 생성합니다. 롤 콜렉션을 지연 초기화하지 못했습니다 ". 이해할 수 있듯이 트랜잭션에 첨부 된 지속성 컨텍스트가 있거나 트랜잭션이 존재하지 않는 경우 새 컨텍스트를 작성하지만,이 경우 트랜잭션은 존재하며 저장소 빈을 호출하는 클라이언트의 상태 비 저장 Bean에서 시작됩니다. 여기
의 간단한 예 :
이@Entity
public class Config{
Long id;
String description;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="equipment")
private Equipment equipment;
}
@Entity
public class Equipment{
Long id;
String name;
@OneToMany(mappedBy = "equipment")
Config config;
}
@Stateless
public class EquipmentRepo{
@PersistenceContext(type=PersistenceContextType.TRANSACTION)
EntityManager em;
public Equipment find(Long id) {
return em.find(Equipment.class, id);
}
}
@Stateless
public class ServiceFacade {
@Inject
EquipmentRepo repo;
public List<Config> findEquipmentConfig(Long id) {
Equipment element = repo.find(id);
List<Config> configurations = element.getConfig();
return configurations;
}
}`
안녕하세요, maress, 답장을 보내 주셔서 감사합니다. 저는 이해 합니다만, 주입 (beanB)에 의해 또 다른 상태없는 빈을 호출 한 다음, beanB가 엔티티를 검색하는 상태 비 저장 빈 (beanA)이 있습니다. 트랜잭션은 사양에 따라 beanA에서 시작하고 beanB가 호출되면 현재 트랜잭션에 첨부하고 entityA를 beanA에 반환하므로 트랜잭션이 계속 실행됩니다. – cmd