Hibernate:多对多的链接器表,最好的OO设计

时间:2011-11-12 10:19:29

标签: java hibernate orm

如果我有3个表,其中包含预期的正常列:客户 CustomerProductLinker 产品

我希望在我的Java代码中执行此操作:

Customer customer =  myService.getCustomer(id); //calls hibernate session
List<Product> customerProducts = customer.getProducts();

我的3个实体会是什么样子以及每个实体中的相应集合,特别是getProducts()方法?或者,为此更好地使用 HQL 命名查询

我正在从java代码创建数据库表(使用hibernate conf中的create选项),因此如果愿意,可以更改表设计。

2 个答案:

答案 0 :(得分:1)

使用@ManyToMany尝试@JoinTable关系。客户有一组(或列表)产品。产品有一组(或一组)客户。

@Entity
public class Customer {
    @ManyToMany(cascade= CascadeType.ALL)
    @JoinTable(name="customer_product",
               joinColumns={@JoinColumn(name="customer_id")},
               inverseJoinColumns={@JoinColumn(name="product_id")})
    private Set<Product> products = new HashSet<Product>();
    ...

@Entity
public class Product {
    @ManyToMany
    @JoinTable(name="customer_product",
               joinColumns={@JoinColumn(name="product_id")},
               inverseJoinColumns={@JoinColumn(name="customer_id")})
    private Set<Customer> customers = new HashSet<Customer>();
    ...

答案 1 :(得分:0)

我会建立像wannik建议的实体。尽量保持简单。如果您开始使用命名查询,那么您正在做更多的工作,而您只是涵盖了一个特定的案例。