JPA:联接表语法

沙吉:

给定以下实体(为简洁起见,在此长定义中省略了一些列):

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

如何获得给定产品SKU的一组相关产品?

products_related表如下所示:

替代文字

我知道如何使用SQL获取答案,但是我是JPA的新手,所以我还不太熟悉API和查询语法。

博zh:

在我看来,已经定义了一些不必要的集合。无论如何:

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

这一部分(在您的代码中提供)应该为您提供所需的产品。只需将其重命名为relatedProducts,然后将其分别命名为setter / getter。

更新:您可以通过以下方式获取对象:

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

获取实体管理器取决于您的设置,并且是寻找教程的更好场所。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章