Java 休眠HQL。子查询中的多个
我有以下实体:Java 休眠HQL。子查询中的多个,java,hibernate,Java,Hibernate,我有以下实体: @Entity public class Company { .... @OneToMany private List<Product> products = new Arraylist<>(); .... } @Entity public class Product { .... @Column(name="product_key") private String productKey;
@Entity
public class Company {
....
@OneToMany
private List<Product> products = new Arraylist<>();
....
}
@Entity
public class Product {
....
@Column(name="product_key")
private String productKey; // same value as in ProductCategory
....
}
@Entity
public class ProductCategory{
....
@Column(name="product_key")
private String productKey // same value as in Product
@ManyToMany
@JoinTable (...)
private List<Category> categories = new ArrayList<>();
....
}
我试图使用
@JoinFormula
将虚拟列表
字段添加到公司
实体中,但没有成功(@JoinFormula
不能与列表类型一起使用,只能与单个值一起使用)我认为您的数据库设计使解决方案变得困难
由于公司与产品之间存在一对多关系,因此关系的所有者应该是产品。因此,您可以在每个产品中保留对该公司的引用
如果我是你,我会选择这样的设计
公司级
@Entity
public class Company {
@OneToMany(mappedBy="company", cascade = CascadeType.ALL)
private List<Product> products = new ArrayList<Product>();
@Id
private int companyId;
}
@实体
公营公司{
@OneToMany(mappedBy=“company”,cascade=CascadeType.ALL)
私有列表产品=新的ArrayList();
@身份证
私人国际公司;
}
产品类别
@Entity
public class Product {
@Id
@Column(name = "product_key")
private String productKey; // same value as in ProductCategory
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "company", nullable = false)
private Company company;
@ManyToMany(cascade = CascadeType.ALL, mappedBy="products")
private List<ProductCategory> categories = new ArrayList<ProductCategory>();
}
@实体
公共类产品{
@身份证
@列(name=“产品密钥”)
私有字符串productKey;//与ProductCategory中的值相同
@manytone(fetch=FetchType.EAGER)
@JoinColumn(name=“company”,nullable=false)
私营公司;
@ManyToMany(cascade=CascadeType.ALL,mappedBy=“products”)
私有列表类别=新的ArrayList();
}
ProductCategory类
@Entity
public class ProductCategory {
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name="ProductWiseCategory", joinColumns=@JoinColumn(name="cat_name"),
inverseJoinColumns=@JoinColumn(name="product_key") )
private List<Product> products = new ArrayList<Product>();
@实体
公共类ProductCategory{
@多个(级联=级联类型.ALL)
@JoinTable(name=“ProductWiseCategory”,joinColumns=@JoinColumn(name=“cat_name”),
inverseJoinColumns=@JoinColumn(name=“product_key”))
私有列表产品=新的ArrayList();
@Entity
public class ProductCategory {
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name="ProductWiseCategory", joinColumns=@JoinColumn(name="cat_name"),
inverseJoinColumns=@JoinColumn(name="product_key") )
private List<Product> products = new ArrayList<Product>();