2016-09-22 6 views
0

entitymanager.mergequery.executeUpdateの違いは何ですか?エンティティマネージャのマージと実行更新の差

私はマージ、上記で

@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); 
    } 


} 

私のDAOクラスを持つ1つのエンティティ順

@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; 

を持っているが、いくつかのトランザクションが間に存在していてもexecuteUpdate();前に起こるアップデートを実行する最後のトランザクションであります起こる。どうして?

私はentityManager.flush();を試しましたが、動作しませんでした。

+0

上記のメソッドを呼び出すコードを投稿してください。 –

+0

あなたのコードについてはわかりませんが、 'merge'と' update'についての質問はhttp://stackoverflow.com/questions/1069992/jpa-entitymanager-why-use-persist-over-merge * "Mergeはエンティティの新しいインスタンスを作成し、提供されたエンティティから状態をコピーし、新しいコピーを管理します。 – markspace

答えて

0

これは、サービスレイヤーから更新メソッドとマージメソッドを呼び出すことで解決しました。 トランザクションをコミットするには私のDAOから返さなければならないことがわかりました。

public void update(Order order){ 
orderDao.updateInvoice(); 
orderDao.mergeInvoice(Order order); 
} 
関連する問題