我有两个实体: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)中?
致谢
答案 0 :(得分:0)
由于Aisle
和Product
都具有双向映射,因此您可以将它们(或什至两个)都加入Salesman
类,而不必根本不需要加入服务表。
答案 1 :(得分:0)
要表示位于特定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;
}