当我们调用session.get()方法时,hibernate会访问数据库并返回原始对象。
当你调用session.load()方法时,它总是返回一个“代理”对象,而不查询数据库。
我的问题是,如果 load() 方法没有访问数据库,那么它如何知道所请求的信息在数据库中是否可用。
最佳答案
假设您有亲子协会。例如,有一张主表。您正在将一个对象的引用注入(inject)到另一对象中。
考虑一个学生类(class)。许多学生属于同一标准的学校。
这里在标准和学生之间生成一对多关系。
现在,在保存学生对象时,您将需要标准的持久对象。
您必须保留学生对象,如下所示:
student.setStandard(standard);
现在,您有了标准对象的主键。而且您知道该标准已经存在于数据库中。现在认为它是一个主表。因此,您并没有真正访问数据库,而是愚弄已经存在一个对象:
Standard standard = session.load(Standard.class, id);
因此,hibernate 不会访问数据库,它会创建一个代理对象,您可以将其注入(inject)到学生对象中。当你调用 session.save(student) 时,它将被保存。
但是假设您正在使用 load() 方法加载标准对象。如果您尝试调用任何方法,例如 standard.getClassTeacher() ,那么它实际上会访问数据库,如果在数据库中找不到它,则会抛出错误。
关于java - session.load()方法如何在不访问数据库的情况下提取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40812461/