Is @JoinColum
当我们使用任何关联类型注释时隐式指定,例如@OneToOne
, @OneToMany
, etc.
这是摘自Student
实体与Laptop
实体
情况1)不使用显式@JoinColum
@OneToMany(cascade=CascadeType.ALL)
private List<Laptop> laptops=new ArrayList<Laptop>();
情况 2) 使用显式@JoinColum
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn
private List<Laptop> laptops=new ArrayList<Laptop>();
当我检查时DEBUG
两种情况“几乎”相似Binding
,即如下所示。
1)所以我可以假设@JoinColum
隐式指定时@OneToMany
是指定的吗?但是等等,我还注意到 Hibernate 试图引用一些完全奇怪的表“student_laptops”,我没有在任何地方创建它(可能是一个连接表)。
那么有人可以描述一下这里的流程到底是什么吗?
Debug: private List<Laptop> laptops=new ArrayList<Laptop>();
//You can totally ignore this. Just specifying for any reference.
DEBUG - Binding column: Ejb3JoinColumn{logicalColumnName='null', referencedColumn='null', mappedBy=''}
DEBUG - Binding column: Ejb3Column{table=org.hibernate.mapping.Table(STUDENT), mappingColumn=laptops, insertable=true, updatable=true, unique=false}
DEBUG - Binding column: Ejb3Column{table=org.hibernate.mapping.Table(STUDENT), mappingColumn=null, insertable=true, updatable=true, unique=false}
DEBUG - Binding column: Ejb3Column{table=org.hibernate.mapping.Table(STUDENT), mappingColumn=element, insertable=true, updatable=true, unique=false}
DEBUG - Binding column: Ejb3Column{table=org.hibernate.mapping.Table(STUDENT), mappingColumn=laptops_KEY, insertable=true, updatable=true, unique=false}
DEBUG - Binding column: Ejb3JoinColumn{logicalColumnName='laptops_KEY', referencedColumn='null', mappedBy='null'}
DEBUG - Binding column: Ejb3JoinColumn{logicalColumnName='null', referencedColumn='null', mappedBy=''}
DEBUG - Binding column: Ejb3JoinColumn{logicalColumnName='null', referencedColumn='null', mappedBy=''}
DEBUG - Collection role: com.infiniteskills.data.entities.Student.laptops
DEBUG - Building property laptops