1
我有以下父實體Hibernate - 是否需要在父實體中包含Set和OneToMany註釋?
@Entity
@Table(name = "EntityA", catalog = "mycatalog")
public class EntityA implements java.io.Serializable {
private int parentId;
private String a;
private Set<EntityB> entityBs = new HashSet<entityB>(0);
public EntityA() {
}
public EntityA(int parentId) {
this.parentId = parentId;
}
public EntityA(int parentId, String a) {
this.parentId = parentId;
this.a = a;
}
@Id
@Column(name = "PARENT_ID", unique = true, nullable = false)
public int getParentId() {
return this.parentId;
}
public void setParentId(int parentId) {
this.parentId = parentId;
}
@Column(name = "columnA", length = 64)
public String getA() {
return this.a;
}
public void setA(String a) {
this.a = a;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "EntityA")
public Set<EntityB> getEntityBs() {
return this.entityBs;
}
public void setEntityBs(Set<EntityB> entityBs) {
this.entityBs = entityBs;
}
及以下的兒童實體
@Entity
@Table(name = "EntityB", catalog = "mycatalog")
public class EntityB implements java.io.Serializable {
private int childId;
private EntityA entityA;
private String b;
public EntityB() {
}
public EntityB(int childId, EntityA entityA) {
this.eventId = eventId;
this.entityA = entityA;
}
public EntityB(int childId, EntityA entityA, String b) {
this.childId = childId;
this.entityA = entityA;
this.b = b;
}
@Id
@Column(name = "CHILD_ID", unique = true, nullable = false)
public int getChildId() {
return this.childId;
}
public void setChildId(int childId) {
this.childId = childId;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PARENT_ID", nullable = false)
public EntityA getEntityA() {
return this.entityA;
}
public void setEntityA(EntityA entityA) {
this.entityA = entityA;
}
@Column(name = "columnB", length = 64)
public String getB() {
return this.b;
}
public void setB(String b) {
this.b = b;
}
}
我注意到,查詢這些實體的工作,即使我不包括組和父OneToMany註釋表。請參閱下面父無設置:
@Entity
@Table(name = "EntityA", catalog = "mycatalog")
public class EntityA implements java.io.Serializable {
private int parentId;
private String a;
public EntityA() {
}
public EntityA(int parentId) {
this.parentId = parentId;
}
public EntityA(int parentId, String a) {
this.parentId = parentId;
this.a = a;
}
@Id
@Column(name = "PARENT_ID", unique = true, nullable = false)
public int getParentId() {
return this.parentId;
}
public void setParentId(int parentId) {
this.parentId = parentId;
}
@Column(name = "columnA", length = 64)
public String getA() {
return this.a;
}
public void setA(String a) {
this.a = a;
}
}
能否請你解釋的差異,如果當它是必要的包括設置在父表?
告訴我一件事情,當你不在母體中添加'Set'和'OneToMany'時,那麼EntityA'和'EntityB'會有什麼關係。要映射一個具有'EntityB'多個條目的'EntityA'你需要在'EntityA'中的'EntityA'中設置'EntityA'的另一個明確對象''ManyToOne'' – Amogh
是的,在父代中保持OneToMany或在子代中保持ManyToOne不會影響數據庫,它會在父代中創建父代ID作爲外鍵。唯一不同的是'EntityA'可以容納多個子對象('set')。 – Amogh