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;
}
另一答案
由于Aisle
和Product
都有双向映射,你可以将它们中的任何一个(甚至两者)加入Salesman
类,你根本不需要加入服务表。
以上是关于JPA:对生成的JoinTable的引用的主要内容,如果未能解决你的问题,请参考以下文章
我啥时候应该在 JPA 中使用 @JoinColumn 或 @JoinTable?
@oneToMany 和 @JoinTable 在 jpa 中具有唯一约束?