2016-10-07 2 views
2

Je travaille actuellement avec l'API Critères Hibernate et je me suis situation suivante:critères Hibernate plusieurs tables

@Entity(name = "A") 
private class A { 
    @Id 
    @GenericGenerator(name = "fileEntryIdGenerator", strategy = "increment") 
    @GeneratedValue(generator = "fileEntryIdGenerator") 
    @Column(name = "DBID") 
    private Long id; 

    @Column 
    private String name; 
    @OneToMany(targetEntity = B.class, cascade = {CascadeType.ALL }, fetch = FetchType.LAZY) @JoinColumn(name = "A_id") 
    private Set<B> references; 
    // .... 
} 

@Entity(name = "B") private class B{ 
@Id 
@GenericGenerator(name = "fileEntryIdGenerator", strategy = "increment") 
@GeneratedValue(generator = "fileEntryIdGenerator") 
@Column(name = "DBID") 
private Long id; @Column private String name;...} 

Maintenant, mon plan est d'obtenir une liste de tous les B de où A.name = « TESTNAME » . Par conséquent j'ai besoin de l'énoncé de critère.

Quelqu'un peut-il m'aider ?!

+0

http://stackoverflow.com/questions/720502/hibernate-criteria-joining-table-without-a-mapped-association – sina

+0

Je pense que ce n'est pas la même chose. le créateur du thread essaie d'obtenir tous les A où B.name = lala. Je veux tous les B où A.name = lala. – Phi

Répondre

1

J'espère que vous essayez de joindre deux tables en utilisant les critères API.Veuillez vérifier le code ci-dessous.

Criteria criteria = session.createCriteria(B.class, "B"); 
criteria.createAlias("B.A", "A", JoinType.INNER_JOIN); 
criteria.add(Restrictions.eq("A.name", "name")); 
criteria.list(); 

Dans le code ci-dessus,

1er - objet Critères est créé pour la classe B.

2ème ligne - B est jointe à l'A en fonction de la colonne de cartographie

3e ligne - La restriction est faite en fonction de la colonne Nom dans A.

4e ligne - Les critères sont exécutés pour obtenir la liste

Aussi je pense qu'il peut y avoir un mappage de classe A dans la classe B (plusieurs à un).

+0

semble vraiment bon mais je reçois cette exception: n'a pas pu résoudre la propriété: A de B – Phi

+0

Je pense que vous devez ajouter la classe A comme un champ dans la classe B avec plusieurs à une annotation. – Sibi

+0

si possible, je voudrais éviter cette relation supplémentaire – Phi