在Hibernate中,load() 与 get() 有什么优势?
谁能告诉我与Hibernate相比有什么优势?load()
get()
谁能告诉我与Hibernate相比有什么优势?load()
get()
对这些方法的语义的解释并不能解释它们之间的实际差异。实际规则如下:
在要加载对象时使用get()
当您需要获取对对象的引用而不发出额外的 SQL 查询时,例如,创建与另一个对象的关系时,请使用:load()
public void savePost(long authorId, String text) {
Post p = new Post();
p.setText(text);
// No SELECT query here.
// Existence of Author is ensured by foreign key constraint on Post.
p.setAuthor(s.load(Author.class, authorId));
s.save(p);
}
负载() | get() |
---|---|
仅当您确定对象存在时才使用 方法。load() |
如果不确定该对象是否存在,请使用以下方法之一。get() |
load() 如果在数据库中找不到唯一 ID,方法将引发异常。 |
get() 如果在数据库中找不到唯一 ID,则方法将返回 null。 |
load() 只是默认返回代理,并且在首次调用代理之前不会命中数据库。 |
get() 将立即命中数据库。 |
代理意味着,休眠将在内存中准备一些具有给定标识符值的假对象,而不会命中数据库。
例如:
如果我们调用session.load(Student.class,new Integer(107));
休眠将在内存中创建一个 id 为 107 的假 Student 对象 [row],但 Student 类的剩余属性甚至不会初始化。