有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

entitymanager合并和执行更新之间的java差异

entitymanager.mergequery.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;

我有刀课

@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();之前,尽管在这两个事务之间有几个事务,但执行更新是发生的最后一个事务。为什么

我试过了,但没用


共 (1) 个答案

  1. # 1 楼答案

    我通过从服务层调用update和merge方法解决了这个问题。 我发现为了让事务得到提交,我必须从DAO返回

    public void update(Order order){
    orderDao.updateInvoice();
    orderDao.mergeInvoice(Order order);
    }