2016-05-11 10 views
0

Ich muss Datensätze basierend auf Integritätsbedingungen abrufen, die für die zugehörigen Datensätze in einer Eins-zu-viele-Beziehung gelten. Zum Beispiel habe ich:Erhalten Sie alle Entitäten mit einer Eins-zu-viele-Beziehung, wobei eine der Entitäten die Kriterien erfüllt

@Entity 
@Table (name = "LISTING") 
public class Listing 
{ 
    @Id 
    @GeneratedValue (strategy = GenerationType.SEQUENCE, generator = "LISTING_SEQ") 
    @SequenceGenerator (name = "LISTING_SEQ", initialValue = 1, allocationSize = 1, sequenceName = "LISTING_SEQ") 
    @Column (unique = true, nullable = false, updatable = false) 
    long id; 

    @OneToMany (mappedBy = "listing", fetch = FetchType.EAGER) 
    Set<ListingLineItem> listingLineItems; 

    ... 
} 

Und ....

@Entity 
@Table (name = "LISTING_LINE_ITEM") 
public class ListingLineItem 
{ 
    @EmbeddedId 
    ListingLineItemPK   id; 

    boolean ignored; 

    @ManyToOne (fetch = FetchType.EAGER) 
    @JoinColumn (name = "listing_id", nullable = false) 
    Listing     listing; 

    ... 
} 

Ich brauche entweder eine JPQL/HQL-Abfrage schreiben oder ein CriteriaBuilder nutzen, um mir Listing s, die eine ähnliche ListingLineItem, wo ignoriert = wahr.

+0

ich hoffe, dass das Feld 'ignored' abgebildet wird !? –

+0

ignoriert wird in der Tat zugeordnet. Danke, das funktioniert wie beabsichtigt und es scheint jetzt lächerlich offensichtlich, dass ich es sehe :) – lmerry213

Antwort

0

Hier ist die Lösung in JPQL:

SELECT l FROM Listing l, ListingLineItem lli 
WHERE lli.listing.id = l.id AND lli.ignored = true