【问题标题】:How to retrieve the data based on the relationship in hibernate如何根据hibernate中的关系检索数据
【发布时间】:2025-12-19 03:15:11
【问题描述】:

我是 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;
    }

而且这种一对多的关系很好用..

现在我想从“用户”表中特定记录的“详细信息”表中检索数据,并附加一个条件,即“已删除”字段等于字符串“否”。

对于hibernate这个需求,我该如何实现呢。

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

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

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

【问题讨论】:

标签: java hibernate filter criteria hibernate-criteria


【解决方案1】:

你可以使用Hibernate filters实现它

首先在您的子表上定义一个过滤器,即Details

@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 单独获取子表并附加它们。

【讨论】: