JPA:对生成的JoinTable的引用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JPA:对生成的JoinTable的引用相关的知识,希望对你有一定的参考价值。

我有两个实体:Product和Aisle。产品可以在一个或多个过道中,过道可以具有一个或多个产品。

@Entity 
public class Product{
   @Id
   private Long id;
   private String name;
   @ManyToMany
   @JoinTable(name = "product_aisle",
            joinColumns = { @JoinColumn(name = "product_id") },
            inverseJoinColumns = { @JoinColumn(name = "aisle_id") })
    private Set<Aisle> aisles = new HashSet<>();
   /* getters, setters, equals and hashcode */
}


@Entity 
public class Aisle{
   @Id
   private Long id;
   private String row;
   private String shelf;
   @ManyToMany(mappedBy="aisles")
   private Set<Product> products = new HashSet<>();
   /* getters, setters, equals and hashcode */
}

我有一个最后的实体:推销员。销售人员负责过道中的产品:

@Entity 
public class Salesman{
   @Id
   private Long id;

   private String name;

   /* ManyToOne to  ProductAisle ?*/

}

问题:如何使用“@ManyToOne”注释将推销员引用到自动创建的连接表(ProductAisle)?

问候

答案

要表示特定Product中的Aisle,您需要另一个实体。这是一个例子:

@Entity 
public class Product{
   @Id
   private Long id;
   private String name;
   @OneToMany(mappedBy = "product")
   private Set<ProductAisle> productAisle = new HashSet<>;
   /* getters, setters, equals and hashcode */
}


@Entity 
public class Aisle{
   @Id
   private Long id;
   private String row;
   private String shelf;
   @OneToMany(mappedBy = "aisle")
   private Set<ProductAisle> productAisle = new HashSet<>();
   /* getters, setters, equals and hashcode */
}

@Entity 
public class ProductAisle{
   @Id
   private Long id;
   @ManyToOne(fetch = FetchType.LAZY)
   private Product product;
   @ManyToOne(fetch = FetchType.LAZY)
   private Aisle aisle;
   /* getters, setters, equals and hashcode */
}

然后你的Salesman将指向一个ProductAisle实例的集合,它将产品映射到过道:

@Entity 
public class Salesman{
   @Id
   private Long id;

   private String name;

   @ManyToOne(fetch = FetchType.LAZY)
   private Set<ProductAisle> productAisle;

}
另一答案

由于AisleProduct都有双向映射,你可以将它们中的任何一个(甚至两者)加入Salesman类,你根本不需要加入服务表。

以上是关于JPA:对生成的JoinTable的引用的主要内容,如果未能解决你的问题,请参考以下文章

我啥时候应该在 JPA 中使用 @JoinColumn 或 @JoinTable?

在哪种情况下使用 JPA @JoinTable 注释?

使用 JoinTable 的 JPA 自联接

@oneToMany 和 @JoinTable 在 jpa 中具有唯一约束?

JPA - 一个实体如何引用多对多关系中涉及的两个其他实体?

Spring Boot JPA @JoinTable 与现有映射表忽略 @GeneratedValue