我有Entity和NamedQuery:
@Entity
@Table(name="MY_TABLE")
@NamedQueries({
@NamedQuery(name="myQuery", query="select m from MyEntity m where m.child.x = 7"
})
public class MyClass {
@Column(name="CHILD_COL")
private Child child;
// getter and setter
}
public class Child {
int x;
// getter and setter
}
现在,我想将其更改为列表o Child:
@Entity
@Table(name="MY_TABLE")
@NamedQueries({
@NamedQuery(name="myQuery", query="select m from MyEntity m where m.childs[0].x = 7"
})
public class MyClass {
@Column(name="CHILD_COL")
private List<Child> childs;
// getter and setter
}
但是'childs [0] .x'语法不存在。知道我该怎么办?
答案 0 :(得分:0)
Hibernate支持索引列表,但定义很重要。
以旧方式(XML映射),您可以按照以下方式工作:
在pojo:
private List<Child> childs;
在XML映射中:
<list name="childs" table="yourtable" cascade="all,delete-orphan"
inverse="false" lazy="false">
<key column="fk_to_parent"/>
<list-index column="an_integer_column"/>
<one-to-many class="Child" />
</list>
在JPA注释中,您必须使用IndexColumn
注释,如下所示:
@IndexColumn(name="an_integer_column", base=0, nullable=false)
所以你有:
@Column(name="CHILD_COL")
@IndexColumn(name="an_integer_column", base=0, nullable=false)
private List<Child> childs;
告诉我它是否正常