gpt4 book ai didi

java - OneToMany 关系中的 Hibernate 标准

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:45:22 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何在检索父元素时使用 hibernate 条件来获取一组特定的子元素。我创建了以下示例实体:

父类

@Entity
public class Parent {
@Id
@Column(name="PARENT_ID")
private long parentId;

@Column(name="NAME")
private String name;

@OneToMany(mappedBy="parent")
private Set<Child> children
}

子类

@Entity
public class Child {
@Id
@Column(name="CHILD_ID")
private long childId

@ManyToOne
@JoinColumn(name="PARENT_ID")
private Parent parent;

@ManyToOne
@JoinColumn(name="GENDER_ID")
private Gender gender;
}

性别等级

@Entity
public class Gender {
@Id
@Column(name="GENDER_ID")
private long genderId;

@Column(name="GENDER_IND")
private String genderInd;
}

hibernate 标准

getSession()
.createCriteria(Parent.class)
.createAlias("children", "c")
.createAlias("c.gender", "g")
.add(Restrictions.eq("g.genderInd", "M"))
.list()

此条件为我提供了一个包含男性(“M”) child 的 parent 列表,并返回每个 parent 的所有 child 。我怎样才能得到一个有男孩的 parent 的列表,并且只有男孩在 Parent.children 集中?

最佳答案

我搜索了几天的解决方案,我遇到了同样的问题,我有一个包含翻译集合的对象,我想查询一个只有当前语言的对象。

我找到了这个解决方案: https://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/filters.html

为我工作,这里有一个适合你的解决方案:

@Entity
public class Parent {
@Id
@Column(name="PARENT_ID")
private long parentId;

@Column(name="NAME")
private String name;

@OneToMany(mappedBy="parent")
@Filter(name="gender", condition="gender.genderInd=:gender")
private Set<Child> children
}

@Entity
@FilterDef(name="genderFilter", parameters=@ParamDef( name="gender", type="string" ) )
public class Child {
@Id
@Column(name="CHILD_ID")
private long childId

@ManyToOne
@JoinColumn(name="PARENT_ID")
private Parent parent;

@ManyToOne
@JoinColumn(name="GENDER_ID")
private Gender gender;
}

在你查询之前:

Session session = sessionFactory.getCurrentSession();
session.enableFilter("genderFilter").setParameter("gender", "M");

关于java - OneToMany 关系中的 Hibernate 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28113565/

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