Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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 JPA、Spring、Hibernate加载实体多关联的问题_Java_Hibernate_Spring_Orm_Jpa - Fatal编程技术网

Java JPA、Spring、Hibernate加载实体多关联的问题

Java JPA、Spring、Hibernate加载实体多关联的问题,java,hibernate,spring,orm,jpa,Java,Hibernate,Spring,Orm,Jpa,我正试图从关联N:N获取数据,但收到的是空白字段。 下面是我的Hibernate映射类: @Entity @Table(name = "companies") public class Company extends NamedEntity { //some_code @ManyToMany( targetEntity = com.hqcargo.shippingstock.domain.CompanyProfile.class, cascade = {Cas

我正试图从关联N:N获取数据,但收到的是空白字段。
下面是我的Hibernate映射类:

@Entity
@Table(name = "companies")
public class Company extends NamedEntity {
 //some_code

@ManyToMany(
        targetEntity = com.hqcargo.shippingstock.domain.CompanyProfile.class,
        cascade = {CascadeType.ALL, CascadeType.ALL },
        fetch = FetchType.EAGER
        )
@JoinTable(
        name = "company_company_profiles",
        joinColumns = {@JoinColumn(
                        name = "company_id",
                        referencedColumnName = "id") },
        inverseJoinColumns = {@JoinColumn(
                        name = "company_profile_id",
                        referencedColumnName = "id") }
        )
private List<CompanyProfile> profiles;
// getters and setters + other code
当我更新每个都正常时(由Hibernate生成sql):

但是,当我加载数据时,我不会从company\u company\u概要文件(由Hibernate生成的sql)中获取信息


您看到我的代码中有任何错误吗?

我不确定这是问题的原因,但您不应该在多对多关联的两侧指定一个
可连接的
。根据JPA规范,
JoinTable
注释位于关联的拥有方(
Company
,在您的情况下):

9.1.25可接合注释
JoinTable
注释用于 关联的映射。A.
JoinTable
注释在 一个多对多系统的拥有方 关联,或以单向方式 一对多关联

因此,在
公司档案
实体中删除它:

@Entity
@Table(name = "company_profiles")
public class CompanyProfile extends NamedEntity {
    //some_code
    @ManyToMany(
        targetEntity = com.hqcargo.shippingstock.domain.Company.class,
        cascade = {CascadeType.ALL, CascadeType.ALL }, 
        mappedBy = "profiles",
        fetch = FetchType.EAGER
    )
    private List<Company> companies;
    // getters and setters + other code
}
@实体
@表(name=“公司概况”)
公共类CompanyProfile扩展了NamedEntity{
//一些代码
@许多(
targetEntity=com.hqcargo.shippingstock.domain.Company.class,
cascade={CascadeType.ALL,CascadeType.ALL},
mappedBy=“profiles”,
fetch=FetchType.EAGER
)
私人上市公司;
//getter和setter+其他代码
}
然后再试一次

工具书类
  • JPA1.0规范
    • 第2.1.8.4节“双向多人关系”
    • 第9.1.25节“可接合注释”
    • 第9.1.26节“多个注释”

我不确定这是否是问题的原因,但您不应该在多对多关联的两侧指定一个可连接的
。根据JPA规范,
JoinTable
注释位于关联的拥有方(
Company
,在您的情况下):

9.1.25可接合注释
JoinTable
注释用于 关联的映射。A.
JoinTable
注释在 一个多对多系统的拥有方 关联,或以单向方式 一对多关联

因此,在
公司档案
实体中删除它:

@Entity
@Table(name = "company_profiles")
public class CompanyProfile extends NamedEntity {
    //some_code
    @ManyToMany(
        targetEntity = com.hqcargo.shippingstock.domain.Company.class,
        cascade = {CascadeType.ALL, CascadeType.ALL }, 
        mappedBy = "profiles",
        fetch = FetchType.EAGER
    )
    private List<Company> companies;
    // getters and setters + other code
}
@实体
@表(name=“公司概况”)
公共类CompanyProfile扩展了NamedEntity{
//一些代码
@许多(
targetEntity=com.hqcargo.shippingstock.domain.Company.class,
cascade={CascadeType.ALL,CascadeType.ALL},
mappedBy=“profiles”,
fetch=FetchType.EAGER
)
私人上市公司;
//getter和setter+其他代码
}
然后再试一次

工具书类
  • JPA1.0规范
    • 第2.1.8.4节“双向多人关系”
    • 第9.1.25节“可接合注释”
    • 第9.1.26节“多个注释”
251252 [13627369@qtp-8132032-9] DEBUG org.hibernate.SQL  -
update
    companies
set
    name=?,
where
    id=?
Hibernate:
update
    companies
set
    name=?,
where
    id=?
251295 [13627369@qtp-8132032-9] DEBUG org.hibernate.SQL  -
insert
into
    company_company_profiles
    (company_id, company_profile_id)
values
    (?, ?)
Hibernate:
insert
into
    company_company_profiles
    (company_id, company_profile_id)
values
    (?, ?)
36088 [13507994@qtp-8132032-13] DEBUG org.hibernate.SQL  -
select
    companies0_.company_profile_id as company2_8_,
    companies0_.company_id as company1_8_,
    company1_.id as id3_0_,
    company1_.name as name3_0_,
from
    company_company_profiles companies0_
left outer join
    companies company1_
        on companies0_.company_id=company1_.id
where
    companies0_.company_profile_id=?
Hibernate:
select
    companies0_.company_profile_id as company2_8_,
    companies0_.company_id as company1_8_,
    company1_.id as id3_0_,
    company1_.name as name3_0_,
from
    company_company_profiles companies0_
left outer join
    companies company1_
        on companies0_.company_id=company1_.id
where
    companies0_.company_profile_id=?
@Entity
@Table(name = "company_profiles")
public class CompanyProfile extends NamedEntity {
    //some_code
    @ManyToMany(
        targetEntity = com.hqcargo.shippingstock.domain.Company.class,
        cascade = {CascadeType.ALL, CascadeType.ALL }, 
        mappedBy = "profiles",
        fetch = FetchType.EAGER
    )
    private List<Company> companies;
    // getters and setters + other code
}