2016-09-22 56 views
0

entitymanager.mergequery.executeUpdate有什么区别?entitymanager合并与执行更新之间的区别

我有一个实体才能

@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

不确定你的代码,但你关于'merge'和'update'的问题:http://stackoverflow.com/questions/1069992/jpa-entitymanager-why-use-persist-over-merge *“合并创建一个您的实体的新实例,从提供的实体复制状态,并管理新的副本。“* – markspace

回答

0

我通过调用服务层的更新和合并方法解决了这个问题。 我发现,为了获得提交的交易,我必须退出我的DAO。

public void update(Order order){ 
orderDao.updateInvoice(); 
orderDao.mergeInvoice(Order order); 
} 
相关问题