如何在HQL中访问元素零?

时间:2017-01-05 18:54:00

标签: hql

我有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'语法不存在。知道我该怎么办?

1 个答案:

答案 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;

告诉我它是否正常