当前位置: 首页 > 知识库问答 >
问题:

OneToMany关系不存储实体字段

张淳
2023-03-14

保存“我的实体”时,通过@OneTomany关系工作的子实体不会保存到它们的表中。我不明白怎么回事。

员工:

@Entity
@Table(name = "EMPLOYEE", schema = PUBLIC)
public class Employee {

private String name;

private String lastname;

@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, orphanRemoval = true)
List<EmployeePhoneNumber> employeePhoneNumbers = new ArrayList<>();

}

EmployeePhoneNumber:

@Entity
@Table(name = "EMPLOYEE_PHONES", schema = PUBLIC)
public class EmployeePhoneNumber {

    @Id
    @SequenceGenerator(allocationSize = 1, name = "SEQ_EMPLOYEE_PHONES", schema = PUBLIC,
            sequenceName = "EMPLOYEE_PHONES_ID_SEQ")
    @GeneratedValue(generator = "SEQ_EMPLOYEE_PHONES", strategy = GenerationType.SEQUENCE)
    @Column(name = "ID", unique = true, nullable = false)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "employee_id", referencedColumnName = "id",
            nullable = false, insertable = false, updatable = false)
    private Employee employee;

    @Column(name = "PHONE_NUMBER", unique = true, nullable = false)
    private String phoneNumber;

    @Enumerated(EnumType.STRING)
    @Column(name = "NUMBER_TYPE", nullable = false)
    private PhoneNumberType phoneNumberType;
}

如何设置这些字段,然后保存实体:

        EmployeePhoneNumber workPhone = new EmployeePhoneNumber();
        workPhone.setPhoneNumber(workPhone);
        workPhone.setPhoneNumberType(PhoneNumberType.WORK_PHONE);

        EmployeePhoneNumber mobilePhone = new EmployeePhoneNumber();
        mobilePhone.setPhoneNumber(mobilePhone);
        mobilePhone.setPhoneNumberType(PhoneNumberType.MOBILE_PHONE);

        EmployeePhoneNumber corporatePhone = new EmployeePhoneNumber();
        corporatePhone.setPhoneNumber(corporatePhoneNumber);
        corporatePhone.setPhoneNumberType(PhoneNumberType.CORPORATE_PHONE);

        List<EmployeePhoneNumber> employeePhoneNumbers = employee.getEmployeePhoneNumbers();
        employeePhoneNumbers.add(workPhone);
        employeePhoneNumbers.add(mobilePhone);
        employeePhoneNumbers.add(corporatePhone);

        employee.setEmployeePhoneNumbers(employeePhoneNumbers);

        employeeRepository.save(employee);

在完成该方法后,我没有一个错误,所有的工作都是正确的,只是表格没有填满--为什么?

共有1个答案

贲文景
2023-03-14

您还必须在EmployeePhoneNumber中设置Employee引用,因为Hibernate将使用它来保存它。

workPhone.setEmployee(employee);
mobilePhone.setEmployee(employee);
corporatePhone.setEmployee(employee);

最好的解决方案是在EmployeephoneNumber上创建一个addEmployeePhoneNumber方法,如下所示:

 public void addEmployeePhoneNumber(EmployeePhoneNumber phoneNumber) {
     phoneNumber.setEmployee(this);
     employeePhoneNumbers.add(phoneNumber);
 }

这样你就不会忘记设定双方的关系。

 类似资料:
  • 我有2个实体(我删除了无用的字段): 而且 这似乎符合我的情况(也是我当前的实现),但它不起作用。 我得到以下错误消息: 来自MySQL: 临时解决方案是从存储库中检索所有相应的权限(按permissionName搜索)。那么保存效果很好。逻辑上是正确的,但我希望有一个更简单的程序...

  • 我希望像查询NodeEntity一样查询RelationshipEntity。 软件包信息: 此存储库不工作。 getEmployeeWorkingOnProject(String,String)返回NULL 我在关键字之后进行了修改,例如将其从修改为像这样的别名,并且还尝试更改了返回中别名的顺序。 我希望获得与特定员工和特定项目相关联的所有状态(边缘)。 或 或其他类型的类似结果,其中关系实体持

  • 此代码崩溃: 原因:组织。postgresql。util。PSQLException:错误:关系“订阅”不存在 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect Springjpa。数据库平台=组织。冬眠地方话PostgreSQL10方言Spring。jpa。冬眠ddl auto=创建拖放

  • 我一直试图将一个实体添加到数据库中,该实体与另一个实体有OneTo许多关系,但当我插入该实体时,它说无法插入id,因为它是null。 我已经映射了这样的父子类: 子实体: 我的json长这样: 这是hibernate抛出的错误: 错误Msg=ORA-01400:无法将NULL插入(“DQISAPPS”。“目录\备注”。“目录\ ID”) 在甲骨文。jdbc。驾驶员t4cttiore11。proce

  • 我有两个词A,B。在这个词中A是父词,有下面的表结构。 A1-->Acolumn 甚至我也尝试过使用普通连接。PLS让我知道我错过了什么。 我使用@query来指定query。选择a From TableA a LEFT OUTER JOIN FETCH a.tableAcollection p,其中a.tableacolum=?1和p.tablebcolumn<>p.tablebcolumn。

  • 我对关系如何在实体中工作以及这对我的JPA存储库意味着什么感到困惑。 我有一个名为Loan的类,它为每个贷款存储一个专辑列表。 我有一个贷款库和一个专辑库。当我启动应用程序时,相册存储库中充满了相册。该专辑是自动生成的。 我也很困惑为什么专辑必须引用带有ManyToOne注释的贷款。为什么相册必须提到贷款? 我大多习惯于关系数据库,所以也许我在以错误的方式思考事情。如果我只能添加新的专辑到贷款,那