2017-01-05 2 views
6

Ich habe das Entity und NamedQuery:Zugriff auf Element Null in 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 
} 

Jetzt will ich es ändern, um eine Liste o Kind haben:

@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 

} 

Aber, aber die 'Childs [0] .x' Syntax tut nicht existieren. Irgendeine Idee wie kann ich es tun?

Antwort

0

Indexierte Listen werden von Hibernate unterstützt, ist aber wichtig für die Definition.

In alter Art und Weise (XML-Mapping) können Sie wie folgt arbeiten:

In pojo:

private List<Child> childs; 

In XML-Mapping:

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

In JPA Anmerkung Sie IndexColumn Anmerkung verwenden müssen wie folgt:

@IndexColumn(name="an_integer_column", base=0, nullable=false) 
So

Sie haben:

@Column(name="CHILD_COL") 
@IndexColumn(name="an_integer_column", base=0, nullable=false) 
private List<Child> childs; 

mir sagen, ob es in Ordnung ist