也许这是基本的东西,但我无法在休眠状态下解决这个问题。
我必须根据某些条件选择一些子记录。
我有一个父实体:
@Entity
@DynamicUpdate
@Table(name = "PARENT", catalog = "MYDB")
public class Parent implements Serializable {
...
private Set<Child1> child1 = new HashSet< child1>(0);
private Set<Child2> child2 = new HashSet< child2 >(0);
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent", cascade = CascadeType.ALL)
public Set<Child1> getChild1() {
return child1;
}
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent")
public Set<Child2> getChild2() {
return child2;
}
}
并且child1为:
@Entity
@DynamicUpdate
@Table(name = "CHILD1", catalog = "MYDB")
public class Child1 implements Serializable {
...
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "ID", referencedColumnName = "ID")
public Parent getParent() {
return parent;
}
现在这里有一对多关系。一个父级可以有许多child1行和许多child2行。 我的问题是选择一些条件很少的child1记录及其父母,但我不希望其他子(child2)与嵌入的父记录一起被提取。
我的sql查询是选择子节点及其父节点:
Select c from Child1 pr join c.parent where c.parent.id IN :ids AND c.createdDate > :time AND c.status = :status
条件运作良好,我也返回了Child1对象。 但返回的Child1记录中的父对象包含所有Child2记录以及包含它的所有其他Child1记录。这根本不需要。
如何确保我只获取所选的Child1记录及其父母......没有额外的内容。我不希望父母与其所有孩子一起归还。
感谢。
答案 0 :(得分:0)
你可以在你的父母中删除你的孩子名单并尝试..和/或者不要在你的父类中使用它们来尝试这个代码:
@Entity
@DynamicUpdate
@Table(name = "PARENT", catalog = "MYDB")
public class Parent implements Serializable {
private Set<Child1> child1;
private Set<Child2> child2;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent", cascade = CascadeType.ALL)
public Set<Child1> getChild1() {
return child1;
}
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent")
public Set<Child2> getChild2() {
return child2;
}
}
如果它不起作用,请删除您的列表并重试..
答案 1 :(得分:0)
尝试按如下所示更改类Child1
的代码,并确保在数据库表中创建了foriegn键列ID
@Entity
@DynamicUpdate
@Table(name = "CHILD1", catalog = "MYDB")
public class Child1 implements Serializable {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ID", referencedColumnName = "ID")
private Parent parent;
}
希望这有帮助。
答案 2 :(得分:0)
试试这个:
Parent Class:
@Entity
@DynamicUpdate
@Table(name = "PARENT", catalog = "MYDB")
public class Parent implements Serializable {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent")
private Set<Child1> child1;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent")
private Set<Child2> child2;
public Set<Child1> getChild1() {
return child1;
}
public Set<Child2> getChild2() {
return child2;
}
}
儿童班:
@Entity
@DynamicUpdate
@Table(name = "CHILD1", catalog = "MYDB")
public class Child1 implements Serializable {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "ID", referencedColumnName = "ID")
public Parent parent;
public Parent getParent() {
return parent;
}