如果我有3个表,其中包含预期的正常列:客户, CustomerProductLinker 和产品。
我希望在我的Java代码中执行此操作:
Customer customer = myService.getCustomer(id); //calls hibernate session
List<Product> customerProducts = customer.getProducts();
我的3个实体会是什么样子以及每个实体中的相应集合,特别是getProducts()
方法?或者,为此更好地使用 HQL 和命名查询?
我正在从java代码创建数据库表(使用hibernate conf中的create选项),因此如果愿意,可以更改表设计。
答案 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建议的实体。尽量保持简单。如果您开始使用命名查询,那么您正在做更多的工作,而您只是涵盖了一个特定的案例。