I have 2 tables : Employee and Department (many to one relationship)
My pojos look like this:
@Entity
@Table(name = "employee")
class Employee {
@Id
private String employeeId;
@ManyToOne(cascade = CascadeType.ALL)
@JoinTable(name = "department", joinColumns = @JoinColumn(name = "university_id"))
private Department department;
}
@Entity
@Table(name = "department")
class Department {
@Id
private String deptId;
private String universityId;
}
因此,基本上当 Employee 对象加载/获取时,它应该使用university_id(可能不是唯一的(来加载其数据成员部门,而不是其主键dept_id。如何使用注释执行此操作?
我是休眠新手,请让我知道我需要做什么。问题总结:如何使用其主键或另一个 POJO 中唯一列以外的任何列加载对象?
OneToMany,ManyToOne 语义用于主外键。您正在尝试在另一列而不是外部连接两个表,这不好,
我宁愿使用带有 where 子句的内部连接。在纯sql中,本来是这样。
select * from Employee e inner join Department d on e.employeeId = d.deptId where universityId = ?
总部
from Employee e inner join fetch e.department d where d.universityId = ?
您的ID数字并不奇怪。
可以使用条件生成器或命名查询来执行查询。今天你想限制对大学ID的搜索,明天它可能是另一列,你不能继续用注释这样做。注释映射器不适用于此目的。
希望这有帮助。