JPA + Spring + EJB の Toplink 実装を使用しています。EJB の 1 つには、次のようなものがあります。
public void updateUser(long userId, String newName){
User u = em.get(User.class, userId);
u.setName(newName);
// no persist is invoked here
}
したがって、基本的にこのupdateUser()メソッドは、指定された .xml でユーザーの名前を更新することになっていますuserId。しかし、このメソッドの作成者は を呼び出すのを忘れていましたem.persist(u)。
そして最も奇妙なことは、それがうまく機能することです。どうしてですか?em.persist()呼び出さないem.merge()と、変更がデータベースに保存される可能性がないことを100%確信していました。彼らはできますか?これが発生するシナリオはありますか?