我对 JPA persist() 和 merge() 方法有一些问题。
在我的代码中,我愿意。
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);
}
}
你有什么主意吗?谢谢