hibernate - jpql fetch 从已有的数据库中获取数据
问题描述
我有两个表存在一对多关系我不知道如何在两个表之间建立一对多关系以及如何编写连接获取查询
部门表 dept_id --主键名 VARCHAR(45),部门
Employee Table emp_id --primary key dep_id ---外键引用Department table pk name phone_Number email
我干了 OneToMany Relation Like
@Entity
@Table(name="department")
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="dept_id")
private Long id;
private String name;
@Column(name = "department_code")
private String departmentCode;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Set<Employee> employees;
//getter setter
@Entity
@Table(name="employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="emp_id")
private Long id;
private String name;
@Column(name = "dep_id")
private Long dpId;
@Column(name = "phone_Number")
private String phoneNumber;
private String email;
//getter 设置器
@Query(value = "select d from dept_uni d join fetch emp_uni e on d.id = e.dep_id where dept_id = :id")
Department findDepartmentById(@Param(value = "id") Long id);
我如何进行映射以及连接提取的查询应该是什么
解决方案
您在实体 Employee 中添加外键的方式不正确。
代替
@Column(name = "dep_id")
private Long dpId;
你应该有类似的东西
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "dep_id")
private Department department;
现在您可以通过实体员工本身访问部门。
Employee emp = employeeRepo.findOne(1);
emp.getDepartment().getName();
注意:JPQL 仅适用于实体。所以它不知道您dept_uni
尝试编写的查询中的表。相反,您应该使用您的实体Department
;
select * from Department..
推荐阅读
- java - 为什么 IntelliJ 将注释标头放在错误的位置……仅用于测试?
- javascript - 如何在 Highcharter 中使用 JavaScript?
- javascript - 为什么使用 React Hooks、MomentJS 对象和间隔/超时更新状态不会触发重新渲染?
- mustache - 如何修复以'm_-'开头的随机字符串,在用小胡子渲染模板后附加到类
- android - 我可以在 Android 的混合应用程序中(通过 Cordova)使用 navigator.mediaDevices.getUserMedia 来使用相机吗?
- c++ - 如何使用 llvm 框架执行函数参数寄存器分配?
- powerbi - 获取所有设备,无论是否有最后借用它的用户
- c# - 优化复杂对象比较
- angular - Highcharts不显示数据
- java - 在 main() 方法中通过子对象调用覆盖的方法