0

session 的负载似乎没用,如果我需要创建一个 pojo,为什么我需要使用 load 来创建一个不可调用的对象?

@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 方法来获取教师对象。

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

在上面的代码中,您需要一个 Sender 实体引用来创建新的 Message 实体,但您不关心它的状态,也不需要从数据库中加载它。load()因此很有用。

于 2013-07-12T06:14:54.990 回答
0

" session.load()" 不是没用的,它在很多情况下都是非常高效的操作。load“ ”和“ get”之间的区别在于“ load”创建了一个所谓的“代理”,它是一个临时的休眠对象,实际上并不读取数据库。相反,“ get”方法总是读取实际数据(如果不存在,则返回 null)。

在您的场景中,它不会产生如此大的差异(load()并且get()都会读取对象),但想象一下您想要连续插入的场景。在这种情况下,您将有“ load()”执行“1 次插入”和“ get()“执行“1 次读取”+“1 次插入”。

于 2013-07-12T06:15:07.307 回答