2010-11-15 11 views
5

Dato il seguente entità (alcune colonne omesso da questo lungo definizione per brevità):JPA: unirsi sintassi tavolo

@Table(name = "Products") 
public class Products implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @Basic(optional = false) 
    @Column(name = "SKU") 
    private String sku; 
    @Basic(optional = false) 
    @Column(name = "ProductName") 
    private String productName; 

    private boolean allowPreOrder; 
    @ManyToMany(mappedBy = "productsCollection") 
    private Collection<Categories> categoriesCollection; 
    @JoinTable(name = "Products_CrossSell", joinColumns = { 
     @JoinColumn(name = "SKU", referencedColumnName = "SKU")}, inverseJoinColumns = { 
     @JoinColumn(name = "CrossSKU", referencedColumnName = "SKU")}) 
    @ManyToMany 
    private Collection<Products> productsCollection; 
    @ManyToMany(mappedBy = "productsCollection") 
    private Collection<Products> productsCollection1; 
    @JoinTable(name = "Products_Related", joinColumns = { 
     @JoinColumn(name = "SKU", referencedColumnName = "SKU")}, inverseJoinColumns = { 
     @JoinColumn(name = "RelatedSKU", referencedColumnName = "SKU")}) 
    @ManyToMany 
    private Collection<Products> productsCollection2; 
    @ManyToMany(mappedBy = "productsCollection2") 
    private Collection<Products> productsCollection3; 

Come faccio ad avere il set di prodotti correlati per un dato prodotto SKU?

La tabella products_related assomiglia a questo:

alt text

so come ottenere la risposta utilizzando SQL ma sono di nuovo da APP così non ho abbastanza grokked la sintassi di query API e ancora.

+0

+1 per avermi bloccato - Mi piacerebbe vedere la soluzione. Ho cancellato la mia risposta precedente perché era sbagliata. Se lo capisco, ne posterò uno nuovo o lo cancellerò. Buona fortuna :) – javamonkey79

risposta

2

Mi sembra che siano state definite alcune raccolte non necessarie. Ad ogni modo:

@JoinTable(name = "Products_Related", joinColumns = { 
    @JoinColumn(name = "SKU", referencedColumnName = "SKU")}, inverseJoinColumns = { 
    @JoinColumn(name = "RelatedSKU", referencedColumnName = "SKU")}) 
@ManyToMany 
private Collection<Products> productsCollection2; 

Questo pezzo (è presente nel codice) dovrebbe fornire i prodotti desiderati. Basta rinominarlo in relatedProducts e il rispettivo setter/getter.

Aggiornamento: È possibile ottenere l'oggetto:

Product p = entityManager.find(Product.class, yourProductId); 
p.getRelatedProducts(); 

Ottenere il gestore di entità dipende dalla configurazione, e un posto migliore per cercare il modo per ottenerlo, è un tutorial.

+0

Per favore fatemi sapere come sarebbe la chiamata per un dato valore di sku? Come chiamerei getRelatedProducts() (dopo averlo rinominato da getProductsCollection2()) e su quale oggetto? – Sajee

+0

Grazie! L'hai fatto sembrare facile. :-) – Sajee

+0

@Bozho, come andresti a trovare qualcosa in una raccolta senza utilizzare la ricerca per ID? – javamonkey79

Problemi correlati