保存“我的实体”时,通过@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);
在完成该方法后,我没有一个错误,所有的工作都是正确的,只是表格没有填满--为什么?
您还必须在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注释的贷款。为什么相册必须提到贷款? 我大多习惯于关系数据库,所以也许我在以错误的方式思考事情。如果我只能添加新的专辑到贷款,那