问题是选择几个父实体并将它们与相应的子项链接起来。对于这样的任务,父母不应该被加载(例如只有id的集合)或者加载了懒惰的字段。
.timeZone
。.dateFromString(...)
。但这不是一种舒适的方式,因为新的实体类可以添加急切的类型。答案 0 :(得分:3)
如果您有父ID并且某个孩子通过外键与父母有关联,则您可以使用假父母
Parent parent = new Parent();
parent.setId(parentId);
child.setParent(parent);
// save child
如果要加载具有惰性字段的父级,则应使所有父级字段变为惰性,并使用join fetch
获取它们,或者通过单独的请求加载。如果您不使用加载的父项来保存数据(例如,您可以在用户编辑数据后构建具有相同ID的新父项),则可以使用部分对象加载自定义转换器,如here所述。
答案 1 :(得分:0)
我希望这会对你有所帮助。
如果您已经映射子模型类并且类似地在 hibernate mapping xml 文件中,以便在不加载父项的情况下,可以保存子对象,则绝对可以完成你的任务。
以下是您的示例代码: -
父类(模型)
private Integer parentID;
private String parentName;
private Child childDetails;
.. getters and setters ..
儿童类(模特)
private Integer childID;
private String childName;
private Parent parentDetails;
.. getters and setters ..
Hibernate映射文件
<class name="Model.Parent" table="Parent">
<id name="parentID" type="integer">
<generator class="increment"></generator>
</id>
<property column="parentName" name="parentName" type="string"/>
<one-to-one class="Model.Child" name="childDetails" />
</class>
<class name="Model.Child" table="Child">
<id name="childID" type="integer">
<generator class="increment"></generator>
</id>
<property column="childName" name="childName" type="string"/>
<many-to-one class="Model.Parent" column="parentID" name="parentDetails" unique="false" not-null="true" lazy="false"/>
</class>
如何在不保存父母的情况下拯救孩子
SessionFactory sf = HibernateUtil.getSessionFactory();
org.hibernate.Session ss = sf.openSession();
Transaction tx = ss.beginTransaction();
Parent p = new Parent();
Child c = new Child();
c.setChildName("XYZ");
c.setParentDetails(p);
ss.save(c);
tx.commit();
ss.close();