0
讓我們假設我有一個名爲Foo
的JPA實體,並具有String myStr
屬性;JPA:無狀態會話bean和管理實體
當我現在定義一個無狀態會話bean是這樣的:
@Stateless
@LocalBean
public class FooBean {
@PersistenceContext(unitName="foo-pu")
private EntityManager em;
public Foo getFoo(int id) {
return em.find(Foo.class,id);
}
public void changeMyStr(Foo entity) {
entity.setMyStr("fooStr");
}
}
將changeMyStr()
所做的更改成爲持久化了,如果我通過之前獲取的Foo
對象通過getFoo()
?
...默認情況下,StatelessSessionBean中的每個方法都發生在它自己的事務中。 – jahroy 2013-04-03 22:11:24
謝謝你這個很好解釋的answere。我應該在'changeMyStr()'中調用'em.merge()'(實際上在我的具體情況下做了一些業務邏輯),還是應該使用'em.find()'來獲取方法內的實體。 – Paranaix 2013-04-03 22:12:09
@Paranaix更正統的選擇是在更高層實現整個事務性業務邏輯。然後這個方法將在同一個事務*中調用'getFoo(...)','changeMyStr(...)'和其他數據訪問「原語」*。通過這種方式,您的實體不會分離,所有事情都可以按照意願去做。如果由於某種原因,這是不可行的,那麼使用'em.merge(...)'是一個合理的選擇。 – gpeche 2013-04-03 22:29:04