session.load用于什么



会话的加载似乎是无用的,如果我需要创建一个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对象。

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

在您的场景中,它不会有太大的区别(load()get()都会读取对象),但想象一下您想在一行中插入的场景。在这种情况下,您将有"load()"执行"1插入"one_answers"get()"执行"读取"+"插入"。

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实体,但您不关心它的状态,也不需要从数据库中加载它。因此CCD_ 11是有用的。

最新更新