1

我是 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_obj.getDetails()”。以同样的方式,我们可以用更少的代码简单地从具有额外条件的数据库中获取数据。

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

4

1 回答 1

1

您可以使用Hibernate 过滤器来实现它

首先在您的子表上定义一个过滤器,即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(...);

请参阅线程以获取更多参考

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

于 2013-06-03T10:36:55.770 回答