我面臨的交易錯誤,例如:如何測試Hibernate Session是否打開?
org.hibernate.LazyInitializationException:無法初始化懶洋洋作用 的集合: app.Parent.children,可以 無法初始化代理 - 沒有會話
這裏在parent.getChildren().size()
。
但是我有一個@Transactional
上@Service
方法:
- 1交易上
createFactory()
創建一個工廠,並給了EntityManager - 1交易上
create()
創建實體
@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 Session是否存活,以便我可以檢測k什麼時候丟失,爲什麼。
謝謝! 。
可能diuplicate: http://stackoverflow.com/questions/345705/hibernate-lazyinitializationexception-could-not-initialize-proxy –
同時檢查會話是否存活不會幫助。你需要弄清楚爲什麼會出現異常。 –
只要事務處理方法結束,會話就會關閉。你有2個事務處理方法,每個方法都打開一個新的會話/實體管理器。最初用於「Parent」的會話已經關閉,因此出現錯誤。將該邏輯推入單個事務服務方法(因爲它應該是imho),而不是在您的控制器中。 –