Java JPA:联接表语法

Java JPA:联接表语法,java,jpa,Java,Jpa,给定以下实体(为了简洁起见,此长定义中省略了一些列): @Table(name=“Products”) 公共类产品实现可序列化{ 私有静态最终长serialVersionUID=1L; @身份证 @基本(可选=假) @列(name=“SKU”) 私有字符串sku; @基本(可选=假) @列(name=“ProductName”) 私有字符串产品名称; 私有布尔allowPreOrder; @ManyToMany(mappedBy=“productsCollection”) 私人收藏分类收藏; @

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

@Table(name=“Products”)
公共类产品实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@基本(可选=假)
@列(name=“SKU”)
私有字符串sku;
@基本(可选=假)
@列(name=“ProductName”)
私有字符串产品名称;
私有布尔allowPreOrder;
@ManyToMany(mappedBy=“productsCollection”)
私人收藏分类收藏;
@JoinTable(name=“Products\u CrossSell”,JointColumns={
@JoinColumn(name=“SKU”,referencedColumnName=“SKU”)},inverseJoinColumns={
@JoinColumn(name=“CrossSKU”,referencedColumnName=“SKU”)}
@许多
私人收藏产品收藏;
@ManyToMany(mappedBy=“productsCollection”)
私人收藏产品收藏1;
@JoinTable(name=“产品相关”,JointColumns={
@JoinColumn(name=“SKU”,referencedColumnName=“SKU”)},inverseJoinColumns={
@JoinColumn(name=“RelatedSKU”,referencedColumnName=“SKU”)}
@许多
私人收藏产品收藏2;
@ManyToMany(mappedBy=“productsCollection2”)
私人收藏产品收藏3;
如何获取给定产品SKU的相关产品集

与产品相关的表如下所示:


我知道如何使用SQL获得答案,但我对JPA是新手,因此我还没有完全了解API和查询语法。

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

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

获取实体管理器取决于您的设置,而查找如何获取实体管理器的更好位置是一个教程。

+1难倒我-我希望看到解决方案。我删除了以前的答案,因为它是错误的。如果我找到了,我将发布一个新答案或取消删除它。祝您好运:)请让我知道给定sk的呼叫情况u值?我将如何调用getRelatedProducts()(在我从getProductsCollection2()重命名它之后)以及在什么对象上调用它?谢谢!您让它看起来很简单。:-@Bozho,如果您没有实体(由ID标识),您将如何在集合中查找内容而不使用find by ID?@javamonkey79,您没有收藏。那么您是如何获得它的?如果您有什么特别的想法,请提出一个单独的问题,提供相关的详细信息。@Bozho我昨晚正在做这件事,但我没有注意到您发布的明显的解决方案。我正试图从p.productsCollection2.sku中找到实体。我可以提出一个新问题,但它似乎是trange仅引用其他人的。
@JoinTable(name = "Products_Related", joinColumns = {
    @JoinColumn(name = "SKU", referencedColumnName = "SKU")}, inverseJoinColumns = {
    @JoinColumn(name = "RelatedSKU", referencedColumnName = "SKU")})
@ManyToMany
private Collection<Products> productsCollection2;
Product p = entityManager.find(Product.class, yourProductId);
p.getRelatedProducts();