entitymanager.merge
和query.executeUpdate
之间有什么区别。
我有一个实体订单
@Entity
@Table(name="ORDERS",schema ="AMZ")
public class Orders {
@Id
@SequenceGenerator(name = "pk_sequence", sequenceName = "ORDERS_SEQ", schema = "AMZ", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pk_sequence")
@Column(name = "ORDERS_ID")
private long id;
@Column(name = "STATUS")
private Status status;
我有DAO课程
@Repository
@Transactional
public class InvoiceDAO {
@PersistenceContext
private EntityManager entityManager;
public void update(Order order){
updateInvoice();
mergeInvoice(Order order);
}
public void updateInvoice(){
entitymanager.createQuery("update Orders set status = 'ERROR' where id=12").executeUpdate();
}
public void mergeInvoice(Order order){
entitymanager.merge(order);
}
}
在上面,合并发生在executeUpdate();
之前,即使执行更新之间存在多个事务,也就是发生的最后一个事务。为什么?
我尝试了entityManager.flush();
,但它没有用。
答案 0 :(得分:0)
我通过调用服务层的更新和合并方法解决了这个问题。 我发现,为了让事务得到提交,我必须退出我的DAO。
public void update(Order order){
orderDao.updateInvoice();
orderDao.mergeInvoice(Order order);
}