1

仮説的なシナリオを考えてみましょう。休止状態で永続エンティティを一時的にする方法はありますが、同時にデータベース内の行を削除しませんか? session.delete()一時的にしますが、同時にデータベースの削除 SQL を発行します。

        //Persistant context started... 
        Session session2 = HibernateUtils.sessionFactory.openSession();
        session2.beginTransaction();

        Admin admin = (Admin) session2.load(Admin.class, 1L);
        session2.delete(admin);

        session2.getTransaction().commit();
        session2.close();
        //Persistant context ended...
        ...
        //admin now is transient but the row has been deleted, can we stop this?
4

1 に答える 1

0

いいえ。ただし、session.evict()( http://docs.jboss.org/hibernate/orm/3.6/javadocs/org/hibernate/Session.html#evict(java.lang.Object) ) を使用して、オブジェクトを切り離すことができます。その後、主キーを 0 (またはその他) に設定すると、元のフィールドの完全なコピーを持つ一時的なオブジェクトが事実上取得されます。したがって、次のことができます。

Foo foo = session.get(Foo.class, 1L);
session.evict(foo);
foo.setID(0L);
foo.setName("copy of original foo");
session.save(foo);

そして、新しい名前の foo のコピーを取得します。

(アソシエーションとカスケードが関係している場合は注意してください。)

于 2013-06-18T20:07:52.280 に答える