2016-07-19 22 views
2

Dürfen wir mithilfe des EntityManagers eine Entität finden, die den zugehörigen Fremdschlüssel verwendet?entitymanager.find() mit Fremdschlüssel

Zum Beispiel habe ich eine Klasse wie folgt aus:

@Entity 
    @Table(name = "shopping_bag") 
    public class ShoppingBag { 

     @Id 
     @GeneratedValue(generator="system-uuid") 
     @GenericGenerator(name="system-uuid", strategy = "uuid") 
     private String id; 

     @OneToOne 
     private Member member; 

     @OneToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true) 
     private Set<Product> product = new HashSet<Product>(); 
} 

Wo Mitglied ist wie folgt:

@Entity 
@Table(name = "shopping_member") 
public class Member { 

    @Id 
    @GeneratedValue(generator="system-uuid") 
    @GenericGenerator(name="system-uuid", strategy = "uuid") 
    private String id; 

} 

Was ich versuche zu tun, alle Produkte bekommen Mitgliedsname zu wissen, mit EntityManager!

Eine Lösung ist die Verwendung von Native SQL - oder HSQL, aber ich möchte wissen, ob es eine einfachere Lösung gibt ... Irgendeine Idee?

Antwort

2

können Sie verwenden Hibernate Criteria

List results = entityManager.createCriteria(ShoppingBag.class, "ShoppingBag") 
    .createAlias("ShoppingBag.member", "member", Criteria.LEFT_JOIN); 
    .add(Restrictions.eq("member.id", someStringValue)) 
    .list(); 

Rererence #1
Reference #2

+1

und verlieren JPA-Anbieter Portabilität ... –

1

Sie eindeutig nicht find() verwenden können, da dies ein Objekt eines Typs mit einer ID findet (wie der javadoc genug, um Ihnen klar erzählt). Sie können eine JPQL Abfrage ausführen, um zu bekommen, was Sie wollen.

SELECT p FROM ShoppingBag b JOIN b.product p JOIN b.member m WHERE m.id = :memberId