2 回答

TA贡献1851条经验 获得超5个赞
一对一单向协会
您的代码设置指向“讲师详细信息”为父级,“教师”为子级关联。为此,您应该在保留/保存教师实体之前保留/保存 InstructorDetail。OneToOne Unidirectional Association
session.beginTransaction();
session.save(theInstructorDetail);
session.save(ins);
session.getTransaction().commit();
一对一双向协会
如果您不想在 DB 中关联 FK,请在 java 休眠中创建双向关联:
讲师.java
@OneToOne
@JoinColumn(name = "instructor_detail_id")
private InstructorDetail theInstructorDetail;
讲师详情.java
@OneToOne(mappedBy="instructor_detail")
private Instructor theInstructor;
持久逻辑
Instructor ins=new Instructor("elon", "musk", "elonmusk@hotmail.com");
InstructorDetail theInstructorDetail=new InstructorDetail("vella Panti Adda", "Acting");
ins.setTheInstructorDetail(theInstructorDetail);
theInstructorDetail.setTheInstructor(ins);
session.beginTransaction();
session.save(theInstructorDetail);
session.getTransaction().commit();
推荐结构
如果您可以对数据库进行更改,我建议您执行以下操作之一:
备选案文A):更好
作为主表和辅助表,在逻辑上更有意义。也就是说,从表中删除列并在InsucateDetail表中添加列。然后,只需翻转java类中的休眠注释配置(与上述相反)。InstructorInstructorDetailinstructor_detail_idInstructorinstructor_id
选项 B):最佳
由于它是一对一关系,因此若要减少内存上的索引占用空间,请对两个表使用相同的 PK。然后,您可以使用注释而不必使用。Instructor_Id@MapsIdBi-directional association
讲师详情.java
@OneToOne
@MapsId
private Instructor theInstructor;

TA贡献1871条经验 获得超13个赞
你已经试过了。
public Instructor(String firstName, String lastName, String email) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.theInstructorDetail= new InstructorDetail();
}
我认为你应该开始所有的属性。
添加回答
举报