gpt4 book ai didi

java - hibernate中如何根据关系检索数据

转载 作者:太空宇宙 更新时间:2023-11-04 07:35:50 24 4
gpt4 key购买 nike

我是 Hibernate 新手。 我有两个名为“用户”和“详细信息”的表。这两个表被映射为“一对多”。映射过程如下。

    @Entity
public class User {
private int id;
private Strng name;

@OneToMany(mappedBy ="user" )

private Collection<Details> details;//= new ArrayList<Details>();
....getters and setters.....
}

详细信息类是

    @Entity
public class Details{
private int id;
private Strng address;
private String deleted;
}

这种一对多的关系工作得很好..

现在我想从“user”表中特定记录的“details”表中检索数据,并附加一个条件,即“deleted”字段等于字符串“NO”。

对于 hibernate 这个要求,我怎样才能实现这个。

过滤器或标准或其他一些,哪一个是解决我的问题的最佳方法,而不会破坏关系。

我的意思是,在关系的帮助下,我们可以简单地通过一行代码获取所有数据,例如“user_obj.getDetails()”。同样的,我们可以用更少的代码,通过额外的条件,简单地从数据库中获取数据。

提前感谢大家......

最佳答案

您可以使用Hibernate filters来实现它

首先在子表上定义一个过滤器,即详细信息

@Entity
@FilterDef(name="filterDeleted", defaultCondition="Deleted='NO'")
public class Details{

那么你需要在父表上有@Filter注释,即User

    @Entity
public class User {
private int id;
private Strng name;

@OneToMany(mappedBy ="user" )
@Filter(name="filterDeleted")
private Collection<Details> details;//= new ArrayList<Details>();
....getters and setters.....
}

并且您需要在获取内容时启用过滤器

session.enableFilter("filterDeleted");
session.load(...);

请参阅this线程以获取更多引用

但是,如果数据太大,我建议您避免使用过滤器,因为我在使用 @OnetoMany@Filter 时遇到了麻烦,后来我不得不使用 Criteria 单独获取子表并附加它们。

关于java - hibernate中如何根据关系检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16894611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com