2011-02-11 16 views
0

J'ai 2 entités:JPA Utilisation clause WHERE

@Entity 
public class Elements implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    private Owner owner; 

} 

@Entity 
public class Owner implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @OneToMany(fetch=FetchType.LAZY) 
    List<Elements> elements; 
} 

Supposons que je veux aller chercher tous elemets bellonging au propriétaire de éléments de table et therfore j'utilise:

TypedQuery query=em.createQuery("SELECT elem FROM Elements elem WHERE 
         elem.owner:=elemOwner", Elements.class); 

query.setParameter("elemOwner", ownerObjectFetchFromDataBase); 

List<TrendUsers> userList=query.getResultList(); 

Mais je reçois les éléments suivants erreur: Les comparaisons entre 'BLOB' et 'BLOB' ne sont pas supportées. Les types doivent être comparables. Les types de chaîne doivent également avoir un classement correspondant. Si le classement ne correspond pas, une solution possible est de jeter opérandes de les forcer à la collation par défaut ...

Est-il possible que je peux choisir d'éléments de table et dans le WHERE objet l'utilisation de la clause (et pas seulement cordes , int ...)?

(ps J'ai aussi essayé la requête ci-dessous et il n'a pas fonctionné: TypedQuery requête = em.createQuery ("SELECT ELEM des éléments élém OU elem.owner.id:=elemOwner", Elements.class); query.setParameter ("elemOwner", ownerObjectFetchFromDataBase.id) Liste userList = query.getResultList(); )

Merci

Répondre

3

Vous devez marquer les als propriétaire d'un ManyToOne.

@Entity public class Elements implements Serializable { 
    ...snip ... 
    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="OWNER_ID") 
    private Owner owner; 
} 

@Entity public class Owner implements Serializable { 
    .. snip ... 
    @OneToMany(fetch=FetchType.LAZY, mappedBy="owner") 
    List<Elements> elements; 
} 

Maintenant vous essayez de stocker le propriétaire sérialisé dans Blob. Cest pas ce que vous voulez ;-)

profiter

Edit: inclus fixer par xatavt

+1

Et ajoutez 'mappedBy = "propriétaire"' 'à elements' » '@ OneToMany' pour définir une relation bidirectionnelle – axtavt

+0

@axtavt: bon point. Merci. je mettrai à jour mon message pour inclure – bert