在Hibernate中,load() 与 get() 有什么优势?

2022-08-31 13:06:12

谁能告诉我与Hibernate相比有什么优势?load()get()


答案 1

对这些方法的语义的解释并不能解释它们之间的实际差异。实际规则如下:

  • 在要加载对象时使用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);
    }
    

答案 2
在Hibernate中,load() 与 get() 有什么优势?
负载() get()
仅当您确定对象存在时才使用 方法。load() 如果不确定该对象是否存在,请使用以下方法之一。get()
load()如果在数据库中找不到唯一 ID,方法将引发异常。 get()如果在数据库中找不到唯一 ID,则方法将返回 null。
load()只是默认返回代理,并且在首次调用代理之前不会命中数据库。 get()将立即命中数据库。

代理意味着,休眠将在内存中准备一些具有给定标识符值的假对象,而不会命中数据库。
enter image description here

例如:
如果我们调用session.load(Student.class,new Integer(107));

休眠将在内存中创建一个 id 为 107 的假 Student 对象 [row],但 Student 类的剩余属性甚至不会初始化。


推荐