Hibernate 双向一对一映射 @实体 @表(name=“讲师”) 公开课教师{ @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) @列(name=“id”) 私有int-id; @OneToOne(级联=级联类型.ALL) @JoinColumn(name=“detail\u id”) 私人讲师或详细信息; @列(name=“name”) 私有字符串名称; }

Hibernate 双向一对一映射 @实体 @表(name=“讲师”) 公开课教师{ @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) @列(name=“id”) 私有int-id; @OneToOne(级联=级联类型.ALL) @JoinColumn(name=“detail\u id”) 私人讲师或详细信息; @列(name=“name”) 私有字符串名称; },hibernate,hibernate-mapping,Hibernate,Hibernate Mapping,这是我的第一个实体类,这个类确实包含必需的setter、getter和constructor,我没有包含它们,因为它们会让问题变得冗长 @实体 @表(name=“InstructorDetails”) 公共类讲师详细信息{ @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) @列(name=“did”) 私家侦探做了; @OneTONE(mappedBy=“detail”,cascade=CascadeType.ALL) 私人教练; @列(name=

这是我的第一个实体类,这个类确实包含必需的setter、getter和constructor,我没有包含它们,因为它们会让问题变得冗长

@实体
@表(name=“InstructorDetails”)
公共类讲师详细信息{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“did”)
私家侦探做了;
@OneTONE(mappedBy=“detail”,cascade=CascadeType.ALL)
私人教练;
@列(name=“address”)
私有字符串地址;
@列(name=“course”)
私人弦乐课程;
@列(name=“hobby”)
私人爱好;
@列(name=“dept”)
私人弦乐部;
}
这是我的第二个实体类,这个类确实包含必需的setter、getter和构造函数,我没有包含它们,因为它们会使问题变得冗长

如您所见,我尝试过执行双向一对一映射, 我已经清楚地提到了
cascade=CascadeType.ALL
,这意味着在一个表中发生的所有操作都被级联到另一个表,我尝试通过包括
@OneToOne(mappedBy=“detail”,cascade=CascadeType.ALL)来执行双向映射。

这里的问题是

会话会话=sf.getCurrentSession(); session.beginTransaction(); 讲师详细信息=新讲师详细信息(“班加罗尔”、“Java”、“吉他”、“开发”); 讲师=新讲师(“约翰”,细节); session.save(讲师); session.getTransaction().commit(); 此代码将详细信息推送到
讲师
讲师详细信息
表中,但如果

会话会话=sf.getCurrentSession(); session.beginTransaction(); 讲师=新讲师(); 讲师。设置名称(“Sam”); 讲师详细信息=新讲师详细信息(“班加罗尔”、“Java”、“吉他”、“开发”); 详细信息。设置讲师(讲师); 保存(细节); session.getTransaction().commit(); 此代码仅将数据推入
讲师详细信息
表,并且
讲师
表不会使用讲师详细信息进行更新,这意味着映射是单向的


讲师
上的所有CRUD操作级联到
讲师详细信息
,但我无法实现反之亦然,请在此帮助我,我如何确保在
讲师详细信息
上执行的所有CRUD也会影响讲师,正如hibernate中所述:

每当形成双向关联时,应用程序开发人员必须确保双方始终同步

因此,您应该按照以下方式更正代码:

会话会话=sf.getCurrentSession(); session.beginTransaction(); 讲师=新讲师(); 讲师。设置名称(“Sam”); 讲师详细信息=新讲师详细信息(“班加罗尔”、“Java”、“吉他”、“开发”); //同步关联双方 详细信息。设置讲师(讲师); 讲师。设置详细信息(详细信息); 保存(细节); session.getTransaction().commit();
谢谢你,如果答案能解决你的问题,那就很有帮助了。我很抱歉我试过了,但是我的名声不到15,所以StAccess不考虑我的投票。