我有实体和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
}
Run Code Online (Sandbox Code Playgroud)
现在,我想将其更改为列表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
}
Run Code Online (Sandbox Code Playgroud)
但是'childs [0] .x'语法不存在.不知道怎么办呢?
Hibernate 支持索引列表,但定义很重要。
在旧方式(XML 映射)中,您可以按如下方式工作:
在波乔:
private List<Child> childs;
Run Code Online (Sandbox Code Playgroud)
在 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>
Run Code Online (Sandbox Code Playgroud)
在 JPA 注释中,您必须使用IndexColumn注释,如下所示:
@IndexColumn(name="an_integer_column", base=0, nullable=false)
Run Code Online (Sandbox Code Playgroud)
所以你将拥有:
@Column(name="CHILD_COL")
@IndexColumn(name="an_integer_column", base=0, nullable=false)
private List<Child> childs;
Run Code Online (Sandbox Code Playgroud)
告诉我是否可以