是否在hibernate中保存一对一关联?

是否在hibernate中保存一对一关联?,hibernate,Hibernate,我正试图把那个人连同他的地址一起救出来。我有person和address之间的一对一映射。person类有address的实例。当我创建person表时,地址表也被创建了。到现在为止没有问题。但当我试图保存person时,并没有保存地址。这是我的映射文件 <hibernate-mapping> <class name="com.daasl.Person" table="person"> <id name="id" type="int">

我正试图把那个人连同他的地址一起救出来。我有person和address之间的一对一映射。person类有address的实例。当我创建person表时,地址表也被创建了。到现在为止没有问题。但当我试图保存person时,并没有保存地址。这是我的映射文件

 <hibernate-mapping>

  <class name="com.daasl.Person" table="person">
  <id name="id" type="int">
     <generator class="increment"/>
  </id>

  <property name="name" column="cname" type="string"/>
  <one-to-one name="address" class="com.daasl.Address"/>
  </class>


 <class name="com.daasl.Address" table="Address">
  <id name="id" type="int">
     <generator class="increment"/>
  </id>
  <property name="personId"  type="int"/>
  <property name="addressLine1"  type="string"/>

 </class> 

 </hibernate-mapping>


我不知道如何在这里创建外键关系(基本上我希望地址表中的person id作为外键到person表),当我将数据保存到person表时,地址也应该保存,这现在还没有发生。类似地,我检索数据,我也应该得到地址的数据

你的一对一关系似乎还可以。如果在保存关联人员时未保存您的地址,可能是因为您尚未配置

默认情况下,Hibernate不执行任何级联,因此只保存人员,而不保存关联的实体。你应该这样做:

<one-to-one name="address" class="com.daasl.Address" cascade="save-update"/>

在您的个人->地址关系中


级联的类型取决于您对Person实体执行的操作(保存、更新等)。根据上面的链接,这种操作有不同类型的级联-使用适合您需要的级联。

您的一对一关系似乎还可以。如果在保存关联人员时未保存您的地址,可能是因为您尚未配置

默认情况下,Hibernate不执行任何级联,因此只保存人员,而不保存关联的实体。你应该这样做:

<one-to-one name="address" class="com.daasl.Address" cascade="save-update"/>

在您的个人->地址关系中


级联的类型取决于您对Person实体执行的操作(保存、更新等)。根据上面的链接,有不同类型的级联与此操作相关-使用适合您需要的级联。

向我们展示您的代码。但可以肯定的是,地址中不应该有personId(int)字段,而应该有person(或type person)字段。这将是一对一的反向关联。请阅读并向我们展示您的代码。但可以肯定的是,地址中不应该有personId(int)字段,而应该有person(或type person)字段。这将是一对一的反向关联。阅读感谢Gonzalo。数据现在也保存在地址表中。但我现在面临的两个问题是:1)数据进入地址表,但地址表中的personid是person表中personid的forign键。不确定如何在上述hbm文件中定义外键关系。2)当我使用person p1=(person)会话检索person时。get(Person.class,1);我期待代理。我的意思是,当我执行p1.getName时,应该加载实际数据。甚至地址关联也会被急切地加载(默认情况下hibernate支持延迟加载)。不确定为什么会发生这种情况?“1)数据在地址表中,但地址表中的personid是personid在person表中的forign key。不确定如何在上面的hbm文件中定义外键关系”不确定要在此处定义什么。你能再详细一点吗?不过,我不会将外键列定义为实体中的字段。如果你想引用地址中的人,我会将地址中关系的反面定义为OneToOne。另外,您可以显示实体吗?最后,不使用注释而不是XML的具体原因是什么?Gonzalo没有不使用注释的具体原因。因此,尽管XML能更好地帮助我理解基础知识。我需要做一些配置来启用注释,还是可以直接开始使用它?谢谢Gonzalo。数据现在也保存在地址表中。但我现在面临的两个问题是:1)数据进入地址表,但地址表中的personid是person表中personid的forign键。不确定如何在上述hbm文件中定义外键关系。2)当我使用person p1=(person)会话检索person时。get(Person.class,1);我期待代理。我的意思是,当我执行p1.getName时,应该加载实际数据。甚至地址关联也会被急切地加载(默认情况下hibernate支持延迟加载)。不确定为什么会发生这种情况?“1)数据在地址表中,但地址表中的personid是personid在person表中的forign key。不确定如何在上面的hbm文件中定义外键关系”不确定要在此处定义什么。你能再详细一点吗?不过,我不会将外键列定义为实体中的字段。如果你想引用地址中的人,我会将地址中关系的反面定义为OneToOne。另外,您可以显示实体吗?最后,不使用注释而不是XML的具体原因是什么?Gonzalo没有不使用注释的具体原因。因此,尽管XML能更好地帮助我理解基础知识,但我是否需要进行一些配置以启用注释,还是可以直接开始使用它?