Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Hibernate JPA@JoinColumn和实体之间的关系_Hibernate_Jpa - Fatal编程技术网

Hibernate JPA@JoinColumn和实体之间的关系

Hibernate JPA@JoinColumn和实体之间的关系,hibernate,jpa,Hibernate,Jpa,在本例中,来自 在本例中: @Entity public class Company { @OneToMany(fetch = FetchType.LAZY, mappedBy = "company") private List<Branch> branches; } @Entity public class Branch { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "company

在本例中,来自

在本例中:

@Entity
public class Company {
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "company")
    private List<Branch> branches;
}

@Entity
public class Branch {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "companyId")
    private Company company;
}
@实体
公营公司{
@OneToMany(fetch=FetchType.LAZY,mappedBy=“company”)
私人上市分行;
}
@实体
公营部门{
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“companyId”)
私营公司;
}

在“@JoinColumn(name=“companyId”)”中,为什么没有“referencedColumnName=id”?它有效吗?

JoinColumn注释不是强制性的。我不知道为什么这么多教程使用此注释,因为它只覆盖默认行为。当他们不喜欢默认生成的名称时,自定义命名策略将是更好的选择

简而言之:

  • 没有JoinColumn注释,因为它是可选的,有人决定不使用它。也许他想要默认的行为
  • 仅当相关实体与模型中的实体不同时,才需要TargetEntity。(可能是类的另一个实现)

  • JoinColumn注释不是必需的。我不知道为什么这么多教程使用此注释,因为它只覆盖默认行为。当他们不喜欢默认生成的名称时,自定义命名策略将是更好的选择

    简而言之:

  • 没有JoinColumn注释,因为它是可选的,有人决定不使用它。也许他想要默认的行为
  • 仅当相关实体与模型中的实体不同时,才需要TargetEntity。(可能是类的另一个实现)
  • 1)为什么@manytone下面没有@JoinColumn注释?

    出于同样的原因,id、name和color没有@Column注释。字段的名称与DB表中的名称相同。发生这种情况时,不需要包括@Column或@JoinColumn注释(以及@Table)

    2)为什么@manytone(targetEntity=Person.class)中没有限定符?

    您已经在说明哪一个是Set的目标实体

    在“@JoinColumn(name=“companyId”)”中,为什么没有“referencedColumnName=id”?有效吗?

    您不必这样做,在公司@Entity中,我猜您在某些字段中有一个@Id注释。

    1)为什么在@Manytone下面没有@JoinColumn注释?

    出于同样的原因,id、name和color没有@Column注释。字段的名称与DB表中的名称相同。发生这种情况时,不需要包括@Column或@JoinColumn注释(以及@Table)

    2)为什么@manytone(targetEntity=Person.class)中没有限定符?

    您已经在说明哪一个是Set的目标实体

    在“@JoinColumn(name=“companyId”)”中,为什么没有“referencedColumnName=id”?有效吗?


    您不必这样做,在公司@Entity中,我猜您在某些字段中有@Id注释。

    看起来不正确

    @ManyToOne
    protected Set<Person> owners;
    
    因此,
    @JoinColumn
    不能与
    @manytomy
    关联一起使用,因为连接表用于此类关联。无论如何,在适当的时候,我总是使用
    @JoinColumn
    使映射更加清晰

    为什么
    @ManyToOne(targetEntity=Person.class)
    中没有限定符

    它可以通过generic
    Set
    计算出来。因此无需具体说明。这对理解映射没有帮助

    在“@JoinColumn(name=“companyId”)”中,为什么没有 referencedColumnName=id“?它有效吗

    默认情况下,Hibernate使用
    公司的
    id
    属性进行关联。这是有效的

    摘要


    我看到很多映射都带有几十个不必要的注释。这很难理解。请仅使用那些映射更清晰的注释。

    看起来不正确

    @ManyToOne
    protected Set<Person> owners;
    
    因此,
    @JoinColumn
    不能与
    @manytomy
    关联一起使用,因为连接表用于此类关联。无论如何,在适当的时候,我总是使用
    @JoinColumn
    使映射更加清晰

    为什么
    @ManyToOne(targetEntity=Person.class)
    中没有限定符

    它可以通过generic
    Set
    计算出来。因此无需具体说明。这对理解映射没有帮助

    在“@JoinColumn(name=“companyId”)”中,为什么没有 referencedColumnName=id“?它有效吗

    默认情况下,Hibernate使用
    公司的
    id
    属性进行关联。这是有效的

    摘要


    我看到很多映射都带有几十个不必要的注释。这很难理解。请仅使用那些映射更清晰的注释。

    如果没有JoinColumn和referencedColumnName,您如何知道这两个实体通过哪些字段相关?这取决于使用的命名策略。通常是类似于“名称”id或“名称”id(如公司id或公司id)的内容。命名策略的优点是,例如,它允许为每个生成的表名添加前缀。请参见Pet课程中的第三个问题->示例。我刚刚添加了。没有JoinColumn和referencedColumnName,您如何知道这两个实体通过哪些字段相关?这取决于使用的命名策略。通常是类似于“名称”id或“名称”id(如公司id或公司id)的内容。命名策略的优点是,例如,它允许为每个生成的表名添加前缀。请参见Pet课程中的第三个问题->示例。我刚刚添加了。没有referencedColumnName=id,Company类的id如何与Branch中的companyId关联?Company通过mappedBy=“Company”与Branch关联,后者是公司的名称
    @ManyToOne
    protected Set<Person> owners;
    
    @ManyToMany
    protected Set<Person> owners;
    
    @ManyToOne
    @JoinColumn
    protected Person owner;