0

pojo を作成する必要がある場合、セッションの負荷は役に立たないように見えますが、呼び出し可能ではないオブジェクトを作成するために負荷を使用する必要があるのはなぜですか?

@Test
public void testTwoSession() {
    Session session = sessionFactory.getCurrentSession();
    session.beginTransaction();
    Teacher t = (Teacher) session.load(Teacher.class, 2);
    System.out.println(t);
    session.getTransaction().commit();
    System.out.println(t);
}

コミットの前に、オブジェクトは印刷されますが、セッションがコミットされると、印刷操作は失敗します。今、get メソッドを使用して Teacher オブジェクトを取得しない理由を考えています。

4

2 に答える 2

0

このload()メソッドは主に、エンティティへの参照だけが必要で、実際にはその状態を気にしない場合に役立ちます。たとえば、このエンティティを別のエンティティにアタッチしたい場合などです。

public void createMessageForSender(String text, String senderId) {
    Message message = new Message();
    message.setText(text);
    Sender sender = (Sender) session.load(Sender.class, senderId);
    message.setSender(sender);
    session.persist(message);
}

上記のコードでは、新しい Message エンティティを作成するために Sender エンティティ参照が必要ですが、その状態は気にせず、データベースから読み込む必要もありません。load()したがって、有用です。

于 2013-07-12T06:14:54.990 に答える
0

" session.load()" は役に立たないわけではなく、多くの状況で非常にパフォーマンスの高い操作です。load" " と " "の違いgetは、" load" がいわゆる "プロキシ" を作成することです。これは、実際には DB を読み取らない一時的な休止状態のオブジェクトです。反対に、" get" メソッドは常に実際のデータを読み取ります (存在しない場合は null を返します)。

あなたのシナリオでは、それほど大きな違いはありません(load()両方get()ともオブジェクトを読み取ります)が、行に挿入したいシナリオを想像してください。その場合、「load()」は「1 挿入」を行い、「get()」は「1 読み取り」+「1 挿入」を行うことになります。

于 2013-07-12T06:15:07.307 に答える