当前位置: 首页 > 面试题库 >

hibernate getId正在加载对象,即使它是惰性的

咸玄天
2023-03-14
问题内容

我记得在JPA或hibernate中有一个注释,告诉hibernate使用getId /
setId方法而不是property(我们注释属性)。如果没有此设置,则getId会导致命中数据库并填充该对象的所有字段,这不是我想要的。有人知道该注释是什么吗?

例:

public void Project {
  @Id
  //Other annotation forcing hibernate to use property get/settter
  public Long id;
}

public Ticket {
  @ManyToOne(lazy=true)
  public Project project;
}

因此,当id已在hibernate项目代理对象中时,ticket.getProject.getId()导致命中数据库以获取项目。该批注将解决我记得的问题。

谢谢,院长


问题答案:

您需要告诉Hibernate使用属性访问而不是字段访问来访问ID:

@Id
@Access(AccessType.PROPERTY)
private Long id;

您真的不应该公开您的字段。



 类似资料:
  • 我们目前有几个@OneToOne关系,由于已知的惰性加载的限制,它们总是会急切地从反方向获取。 为了启用逆关系的延迟加载,我正在尝试启用构建时字节码检测。 到目前为止我所做的... 这些关系现在不再急切地加载...但是它们也不会延迟加载,它们只是静默地返回null。 我尝试从实体中删除接口和字段,因为我不确定是否需要这样做,在此之后,我在启动时不再获得消息,并且默认情况下返回到急切加载。 我是不是

  • 我试着把我的头绕到相对较新的img属性“加载”上。 我知道,如果img具有load=“lazy”属性,那么它会告诉支持该属性的浏览器,在接近视口时可以加载该属性。 那么为什么不总是设置loading=“lazy”?那些立即出现在屏幕上的图像无论如何都会被渲染,因为它们已经在视口中了。因此,在这种情况下,基本上忽略了load=“lazy”。 在这个演示https://mathiasbynens.be

  • 问题内容: 我使用Hibernate 5.2.5(如果重要的话,也可以使用kotlin和spring 4.3.5),并且我希望延迟加载类的某些字段。但是问题是所有字段都立即加载,我没有任何特殊的Hibernate设置,也没有使用Hibernate.initialize()。 这就是我的查询方式 TaskRepoImpl: TaskService: 并输出: 请告知我的代码出了什么问题以及如何使Hi

  • 我有我的问题的简单例子。有两个学生和三个科目。起初,学生1拥有所有科目,学生2没有科目。关系是一个学生和多个学科的关系。 我正在尝试使用jpa hibernate将subject1从学生1交换到学生2。在数据库中出现事务提交更改后:主题表的外键student_id发生了更改,但在java中,即使我从数据库加载学生1,对象仍然具有subject1。 主要代码: 提交后主题表如下所示。它显示id为1的

  • 我知道懒加载是做不到的,如果你在一对一的关系中有双向的关系。 所以我读了一篇关于如何使JPA OneToOne关系变懒的文章。 文章说你不能在一对一的关系中创建代理,但我不太理解。 我觉得多对一的关系和一对一的关系没有什么区别。他说,在多对一的关系中,您可以创建一个代理,因为您可以从fk获得值。 我觉得这两个是不一样的。我知道PK值相等,那么为什么不只有一对一的关系做懒加载呢?