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(可能不是唯一的)来加载其数据成员Department,而不是它的主键dept_id。我怎么能用注释做到这一点?
我是hibernate.please的新手。让我知道我需要做什么。总结问题:如何使用除其主键或来自另一个POJO的唯一列以外的任何列加载对象?
答案 0 :(得分:0)
OneToMany,ManyToOne语义用于主外键。你试图在另一列上加入两个表,而不是外来的,这不好,
我宁愿在where子句中使用内连接。 在纯sql中它本来就是。
select * from Employee e inner join Department d on e.employeeId = d.deptId where universityId = ?
HQL
from Employee e inner join fetch e.department d where d.universityId = ?
你的ID不是数字怪。
您可以使用条件构建器或命名查询来执行查询。 今天你想明天限制大学id的搜索它可能是另一个专栏,你不能继续用注释做这个。注释映射器不适用于此。
希望这有帮助。