为了账号安全,请及时绑定邮箱和手机立即绑定

JPA :对生成的 JoinTable 的引用

JPA :对生成的 JoinTable 的引用

梦里花落0921 2021-08-13 16:16:06
我有两个实体: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)?
查看完整描述

2 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

要表示Product特定中的 a,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;


}


查看完整回答
反对 回复 2021-08-13
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

由于两者Aisle和 相互之间Product具有双向映射,因此您可以将它们中的任何一个(甚至它们两个)加入到Salesman类中,而您根本不需要加入服务表。


查看完整回答
反对 回复 2021-08-13
  • 2 回答
  • 0 关注
  • 242 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信