0
entitymanager.merge
とquery.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();
を試しましたが、動作しませんでした。
上記のメソッドを呼び出すコードを投稿してください。 –
あなたのコードについてはわかりませんが、 'merge'と' update'についての質問はhttp://stackoverflow.com/questions/1069992/jpa-entitymanager-why-use-persist-over-merge * "Mergeはエンティティの新しいインスタンスを作成し、提供されたエンティティから状態をコピーし、新しいコピーを管理します。 – markspace