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