【发布时间】:2018-05-23 17:38:23
【问题描述】:
我正在为以下事情苦苦挣扎:
我有一个无状态 bean 作为实体的存储库,这个 bean 声明了一个实体管理器。
当我从另一个无状态 bean 调用这个 bean 时,会返回一个实体,然后如果在这个新返回的实体中调用一个关系,则会为“org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role”引发异常.据我了解,持久性上下文附加到事务,或者如果事务不存在则创建一个新的,但在这种情况下,事务存在并且它在调用存储库 bean 的客户端无状态 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;
}
}`
【问题讨论】:
标签: java jpa jakarta-ee transactions ejb