java - session.load()方法如何在不访问数据库的情况下提取数据?

标签 java hibernate session orm

当我们调用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/

相关文章:

java - 在 Maven 测试上生成数据库架构(Hibernate)

PHP - 在函数内设置 session

asp.net-mvc - Cookie 过期或 session 超时过早

java - 使 JPanel 占据 JFrame 的全宽

java - 使用未绑定(bind) ID 通过 SSL 绑定(bind)到 Active Directory

java - 在 JUnit 测试期间动态更改 bean 范围

java - 连接列留空

java - Hibernate 查询中的 Oracle 存储过程执行

java - 无法使 Struts2.2.1 注释在 Netbeans 6.9 上工作

hibernate - Grails - 如何在服务中保存域对象?