Hibernate 使用存储库#保存Spring数据时未进行实体之间的JPA映射

Hibernate 使用存储库#保存Spring数据时未进行实体之间的JPA映射,hibernate,spring-data-jpa,spring-data,Hibernate,Spring Data Jpa,Spring Data,我有两个实体:员工和部门。通过EmployeeDepartment,它们之间有一个映射。相关代码非常简单,如下所示: @实体 @表(name=“employees”) @资料 公营雇员{ 公共枚举性别{ M、 F } @身份证 @列(name=“emp_no”) 私人国际雇员人数; @列(name=“出生日期”) 私人本地日期出生日期; @列(name=“first_name”,长度=14) 私有字符串名; @列(name=“last_name”,长度=16) 私有字符串lastName; @列

我有两个实体:
员工
部门
。通过
EmployeeDepartment
,它们之间有一个映射。相关代码非常简单,如下所示:

@实体
@表(name=“employees”)
@资料
公营雇员{
公共枚举性别{
M、 F
}
@身份证
@列(name=“emp_no”)
私人国际雇员人数;
@列(name=“出生日期”)
私人本地日期出生日期;
@列(name=“first_name”,长度=14)
私有字符串名;
@列(name=“last_name”,长度=16)
私有字符串lastName;
@列(name=“gender”,长度=1)
@枚举(EnumType.STRING)
私人性别;
@列(name=“雇用日期”)
私人雇佣;
@OneToMany(mappedBy=“employee”)
私人名单员工部门名单;
}
@实体
@表(name=“部门”)
@资料
公共课系{
@身份证
@列(name=“dept_no”,长度=4)
公共字符串部门号;
@列(name=“dept\u name”,长度=40)
公共字符串departmentName;
@OneToMany(mappedBy=“department”,fetch=FetchType.LAZY)
私人名单员工部门名单;
}
@实体
@表(name=“dept\u emp”)
@资料
@IdClass(EmployeeDepartment.EmployeeDepartmentId.class)
公营雇员部{
@资料
公共静态类EmployeeDepartmentId实现可序列化{
私人雇员;
私人弦乐部;
}
@身份证
@许多酮
@JoinColumn(name=“emp_no”)
私人雇员;
@身份证
@许多酮
@JoinColumn(name=“部门号”)
私人部门,;
@列(name=“from_date”)
私有LocalDate fromDate;
@列(name=“截止日期”)
私有localdatetodate;
}
现在我有了下面的示例测试,它使用
insert.sql
来设置数据。。从
insert.sql
开始

插入
进入
员工
(出生日期、名字、性别、雇用日期、姓氏、emp编号)
价值观
('1984-09-03','koray','M','1984-09-03','tugay',1);
插入
进入
部门
(部门名称、部门编号)
价值观
('foo','1');
插入
进入
环境管理部
(自日期、截止日期、部门号、emp号)
价值观
('1984-09-03', '1984-09-03', '1', 1);
我做的最简单的测试是:

assertThat(employeeRepository.findById(1.get().getEmployeeDepartmentList()).hasSize(1);
该测试按预期通过。。但我不想麻烦处理sql文件,所以我想在测试中设置实体:

Employee=newEmployee();
employeeRepository.save(雇员);
Department=newDepartment();
departmentRepository.save(部门);
EmployeeDepartment EmployeeDepartment=新的EmployeeDepartment();
employeeDepartment.setEmployee(employee);
员工部。设置部门(部门);
雇员部门。setFromDate(LocalDate.of(1984年9月3日));
就业部,设定日期(1994年9月3日);
employeeDepartmentRepository.save(employeeDepartment);
资产(employeeRepository.findById(employee.getEmployeeNumber())
.get().getEmployeeDepartmentList()).hasSize(1);
此测试失败,因为
getEmployeeDepartmentList()
null
。据我所知,数据库中的数据与我的两个测试完全相同

当我使用
jdbcreepository
类插入对象时,
getEmployeeDepartmentList()
为什么会返回
null
集合

我进行此测试的唯一方法是,在保存
employeeDepartment
对象后,我需要再次保存
employee

employee.setEmployeeDepartmentList(Arrays.asList(employeeDepartment));

但我不明白为什么需要这样做。。可能是因为Hibernate缓存?

您是否执行了
entityManager.flush()
断言之前
?看见