gpt4 book ai didi

java - Hibernate 在创建时设置交叉引用

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:48:37 26 4
gpt4 key购买 nike

我有两个实体,Project 和 ProjectFee:

public class Project implements Serializable {
private Integer id;
//some more fields
private Set<ProjectFees> fees = new LinkedHashSet<>();
}

public class ProjectFee implements Serializable {
//some more fields
private Integer idProject; //id of the Project ProjectFee is related to
}

映射为:

<class name="com.package.Project" table="project">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<!-- more fields -->
<set name="fees" table="project_fees" cascade="all" fetch="join" lazy="false">
<key>
<column name="id_project"/>
</key>
<one-to-many class="com.package.ProjectFees"/>
</set>

</class>

<class name="com.package.ProjectFees" table="project_fees">
<!-- more fields -->
<property name="idProject" type="java.lang.Integer">
<column name="id_project" />
</property>
</class>

因此,当我尝试使用级联创建一个新项目和一个新项目费用时,我收到一个错误,因为 idProject 在数据库中不能为 null,并且由于项目仍未创建所以它没有设置,所以它没有 ID。我知道我可以通过创建方法来解决它:

  1. 从项目中删除项目费用
  2. 创建项目
  3. 将 ProjectFees 添加到每个项目设置 idProject
  4. 更新项目

但这是一种“肮脏”的方式,所以我想知道是否有某种方法可以自动执行此操作

最佳答案

将您的 ProjectFees 映射更改为:

<many-to-one name="idProject" class="com.gesmifid2.common.model.Project">
<column name="id_project" />
</many-to-one>

编辑:

您的 ProjectFee 类应如下所示:

public class ProjectFee implements Serializable {
//some more fields
private Project project; //project ProjectFee is related to
}

每次您向Project 添加新的ProjectFee 时,您都应该在ProjectFee 中设置该ProjectProject 类中的方法示例:

public void addProjectFee( ProjectFee pf){
fees.add(pf);
pf.setProject(this);
}

关于java - Hibernate 在创建时设置交叉引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47547565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com