我面临交易错误:
org.hibernate.LazyInitializationException:懒得初始化 角色集合: app.Parent.children,可以 不初始化代理 - 没有会话
此处parent.getChildren().size()
。
但我的@Transactional
方法确实有@Service
:
createFactory()
上的1个交易,用于创建工厂并提供实体管理员create()
上的1个交易来创建实体@Path("api/parents")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Controller
public class ParentResource {
@Autowired
private ParentService parentService;
@POST
public Parent create(Parent parent) {
ParentFactory parentFactory = parentService.createFactory(parent);
return parentService.create(parent);
}
}
@Service
public class ParentService {
@PersistenceContext
private EntityManager em;
@Transactional
public ParentFactory createFactory(Parent parent) {
return new ParentFactory(parent, em);
}
@Transactional
public Parent create(ParentFactory parentFactory) {
return parentFactory.create();
}
}
// No Transactional annotation
public class ParentFactory {
private Parent parent;
private EntityManager em;
public ParentFactory(Parent parent, EntityManager em) {
this.parent = parent;
this.em = em;
}
public parent create() {
if(parent.getChildren().size() < 3) { // Exception here
em.persist(this.parent);
}
}
}
我希望能够测试我的Hibernate会话何时处于活动状态,以便我可以检查它何时丢失以及为什么会丢失。
谢谢!
答案 0 :(得分:0)
我认为处理您的要求的最佳方法是在子属性上使用jpa验证器@Size(min = 3)
答案 1 :(得分:-2)
尝试使用session.getTransaction()。isActive()