Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠HQL。子查询中的多个_Java_Hibernate - Fatal编程技术网

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>();