2017-01-05 6 views
6

У меня есть сущность и NamedQuery:Как получить нулевой элемент в HQL?

@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 
} 

Теперь я хочу, чтобы изменить его, чтобы иметь список о дитя:

@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 

} 

Но но 'Чайлдс [0] .x' синтаксис делает не существует. Любая идея, как я могу это сделать?

ответ

0

Индексированные списки являются supporterd 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; 

Скажите мне, если это нормально