0
我有JPA persist()和merge()方法的問題。JPA 2.0 Hibernate 4.1.2實體沒有找到,甚至沒有被發現之前
在我的代碼中,我這樣做。
Foo foo = new Foo("abc");
fooService.persist(foo)
..(blabla)
foo.setField("123");
fooService.merge(foo);
此代碼在我的數據庫MySQL中創建兩行foo。
一次與foo(abc,null)和另一個與foo(abc,123)。
當我查看mysql查詢時,merge(foo)在數據庫中找不到對象foo,因此它使用更新的數據創建新行。 請注意,fooService.persist(foo)在事務中執行,而fooService.merge(foo)在另一個事務中執行。我已經調用flush()後堅持,但它不起作用。
請在下面找到我的代碼(我不詳細全部)
@Entity
public class Foo {
@Id
@GeneratedValue
private Long id;
private String name;
private String field;
public Foo(String name){
this.name = name;
}
}
public class FooServiceImpl {
@Autowired
FooDao fooDao;
@Transactional(Propagation.REQUIRED)
public void persist(Foo foo){
fooDao.persist(foo);
}
@Transactional(Propagation.REQUIRED)
public Foo merge(Foo foo){
return fooDao.merge(foo);
}
}
public class FooDaoImpl {
@PersistenceContext
private EntityManager entityManager;
public void persist(Foo foo){
this.entityManager.persist(foo);
this.entityManager.flush();
}
public Foo merge(Foo foo){
return this.entityManager.merge(foo);
}
}
你有什麼想法?謝謝