Hibernate 可以停止jpa中的连接吗?
我在实体类中定义了联接。当我执行查询时,连接实体也会返回 是否可以停止这些联接,或者它们是否总是发生?在某些情况下,我希望停止它们的发生,以便不在传输对象中传输不必要的关联实体。或者,这种做法只是为了转移对象而剥离所需的内容Hibernate 可以停止jpa中的连接吗?,hibernate,rest,jpa,Hibernate,Rest,Jpa,我在实体类中定义了联接。当我执行查询时,连接实体也会返回 是否可以停止这些联接,或者它们是否总是发生?在某些情况下,我希望停止它们的发生,以便不在传输对象中传输不必要的关联实体。或者,这种做法只是为了转移对象而剥离所需的内容 谢谢如果您不需要在每个请求上获取所有连接实体,您可以使用延迟获取。 此获取参数可以选择性地添加到注释:@Basic、@OneToMany、@ManyToOne、@OneToOne和@ManyToMany e、 g.@ManyToOne(fetch=FetchType.LAZ
谢谢如果您不需要在每个请求上获取所有连接实体,您可以使用延迟获取。 此获取参数可以选择性地添加到注释:@Basic、@OneToMany、@ManyToOne、@OneToOne和@ManyToMany e、 g.
@ManyToOne(fetch=FetchType.LAZY)
通过设置FetchType.LAZY,在显式访问这些字段之前,您不会从数据库中检索所有这些合并字段 更好的方法是创建一个新的传输对象并从数据库中获取该对象。因此,对于EG:如果有人类,并且需要一些属性来传输,请考虑执行下面的 最初的Person类看起来像
Class Person {
private String firstName;
private String lastName;
Private Set<User> users
}
现在您可以将查询编写为
Select new PersonDTO(firstName, lastName) from Person p;
注意:Persondo中相应的构造函数很重要
希望这有帮助 谢谢。当我检查集合时,关联的对象没有被加载,但是当我将集合添加到响应实体时,我认为它一定是在自动访问关联的实体,因为响应仍然返回所有内容。我是否必须显式设置一个传输对象,并使用BeanUtils.Copy之类的东西来阻止这种情况发生?再次感谢。这可能是一个解决方案。如果您在应用程序的任何一点上都不使用链接实体,那么您可能会忽略相关JPA实体Bean中不需要的属性。您将如何扩展此模式以处理更多字段?继续向构造函数添加所需的字段似乎不合适。
Select new PersonDTO(firstName, lastName) from Person p;