2010-11-15 13 views
5

Dada la siguiente entidad (algunas columnas omitido de esta larga definición por razones de brevedad):APP: la sintaxis de combinación tabla

@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; 

¿Cómo consigo el conjunto de productos de un determinado producto SKU?

La tabla products_related se parece a esto:

alt text

sé cómo obtener la respuesta utilizando SQL, pero soy nuevo en JPA así que no he asimilado bien la Sintaxis de la API y la consulta todavía.

+0

+1 por fallarme: me gustaría ver la solución. Eliminé mi respuesta anterior porque era incorrecta. Si lo resuelvo, publicaré uno nuevo o lo recuperaré. Buena Suerte :) – javamonkey79

Respuesta

2

Me parece que hay algunas colecciones innecesarias definidas. De todos modos:

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

Esta pieza (está presente en su código) debe darle los productos deseados. Simplemente renómbrelo a relatedProducts, y el setter/getter respectivo.

Actualización: Usted puede obtener el objeto de:

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

Obtención del gestor de la entidad depende de la configuración, y un mejor lugar para buscar la manera de obtenerla, es un tutorial.

+0

Por favor, hágame saber cómo se vería la llamada para un determinado valor sku? ¿Cómo llamaría a getRelatedProducts() (después de renombrarlo de getProductsCollection2()) y en qué objeto? – Sajee

+0

¡Gracias! Hiciste que parezca fácil. :-) – Sajee

+0

@Bozho, ¿cómo harías para encontrar algo en una colección sin usar el find by ID? – javamonkey79

Cuestiones relacionadas