2010-06-26 10 views
8

मेरे पास चार इकाइयां हैं जो एक प्रश्न में शामिल हैं कि मुझे थोड़ी परेशानी हो रही है। Exchange----*Contract*----*Combo----*Trade और (सरलीकृत) संस्थाओं इस प्रकार हैं::जेपीए: कई पूछताछ में बहुत से मदद की आवश्यकता

@Entity 
public class Exchange implements Serializable { 
    @Id(name="EXCHANGE_ID") 
    private long exchangeId; 

    @Column 
    private String exchangeShortName; 
} 


@Entity 
public class Contract implements Serializable { 
     @Id 
     private long contractId; 

     @Column 
     private String contractName; 

     @ManyToOne 
     @JoinColumn(name="EXCHANGE_ID") 
     private Exchange exchange; 

     @ManyToMany 
     @JoinTable(name="CONTRACT_COMBO", 
         joinColumns = { @JoinColumn(name="CONTRACT_ID") }, 
         inverseJoinColumns = {@JoinColumn(name="COMBO_ID")}) 
     private Set<Combo> combos; 

     @Column(name = "ACTIVE_FLAG") 
     private String activeFlag; 
} 

@Entity 
public class Combo implements Serializable { 

     @Id 
     @Column(name="COMBO_ID") 
     private Integer id; 

     @ManyToMany 
     @JoinTable(name="CONTRACT_COMBO", 
         joinColumns = { @JoinColumn(name="COMBO_ID") }, 
         inverseJoinColumns = {@JoinColumn(name="CONTRACT_ID")}) 
     private Set<Contract> legs; 

     @OneToMany(mappedBy = "combo") 
     private Set<Trade> trades;  
} 

@Entity 
public class Trade implements Serializable { 
     @Id 
     @Column(name="TRADE_ID") 
     private long tradeId; 

     @Column(name="REFERENCE") 
     private String reference; 

     @ManyToOne 
     @JoinColumn(name="COMBO_ID") 
     private Combo combo; 
} 

मैं किसी खास विनिमय जो मैं काफी MEMBER OF के साथ काम करने के लिए नहीं मिल सकता है सभी ट्रेडों की एक सूची प्राप्त करना चाहते हैं संबंध इस प्रकार है। किसी भी सहायता की सराहना की जाएगी।

उत्तर

10

लगभग इस

select distinct t 
    from Trade t 
    join t.combo c 
    join c.legs l 
    join l.exchange e 
where e.exchangeShortName = 'whatever' 
+0

ग्रेट - पूरी तरह से काम करता है। – OurKid

1

वास्तव में अनुकूल नहीं है, लेकिन मुझे लगता है कि इस चाल करना चाहिए:

Long exchangeId = Long.valueOf(5324623L); 
List<Trade> trades = em.createQuery("select T from Trade T where T in " + 
    "(select distinct C from Combo c where c member of " + 
     "(select e.combos from Exchange e where e.id = :id) " + 
    ")").setParameter("id", exchangeId).getResultList(); 
+0

की कोशिश करें, लेकिन मुझे लगता है आप अनुबंध के लिए लिंक याद किया। – OurKid

संबंधित मुद्दे