Hibernate @OneToMany Mapping 获取记录
Posted
技术标签:
【中文标题】Hibernate @OneToMany Mapping 获取记录【英文标题】:Hibernate @OneToMany Mapping fetching records 【发布时间】:2018-09-14 12:47:14 【问题描述】:我到处搜索,但无法得到我需要的东西 无法获得相应的输出。 我在 SQL 中有两个类 Employee 和 EmployeeLocation 以及它们各自的表。
这是我的表 For EmployeeLocation Table multiple emp_ids
MyScenario -> 在员工表中 id 是主键并且具有唯一值,但在 EmployeeLocation 表中我将该员工 id 作为 emp_id 在 EmployeeLocation 表中,它不是唯一的,多次出现。
我正在尝试实现@OnetoMany 关联但没有成功。 帮助表示赞赏。
class Employee
private integer id;
@OneToMany(fetch=FetchType.EAGER,mappedBy="empId")
private List<EmployeeLocation> employeeLocation;
//getters and setters
class EmployeeLocation
private integer id;
private integer emp_id;
// emp_id is a primary key in employee table
//fields getters and setters
【问题讨论】:
为什么不成功?您是否收到一些错误或不知道该怎么做? 在Employee对象中获取EmployeeLocation的null对象 你如何查询它@GauravMasand? 试试@OneToMany(fetch=FetchType.EAGER,mappedBy="emp_id")
【参考方案1】:
您需要在EmployeeLocation
和JoinColumn
上映射一些employee
属性来映射emp_id
,如下所示:
@Entity
class Employee
@Id
private Integer id;
@OneToMany(fetch=FetchType.EAGER, mappedBy="employee") // refer to the atribute name of the entity Employee on the EmployeeLocation
private List<EmployeeLocation> employeeLocation;
//getters and setters
@Entity
class EmployeeLocation
@Id
private Integer id;
@JoinColumn(name = "emp_id") // name of the column on database table
@ManyToOne(fetch = FetchType.LAZY, optional = false)
private Employee employee;
【讨论】:
试过这个解决方案。没有数据 @GauravMasand 你是怎么查询的?在您的问题上添加此信息。这应该有效。 我想要 Employee 对象,在里面我会有 EmployeeLocation 对象我希望你明白我想说的话。【参考方案2】:实际上,在EmployeeLocation
中,您需要引用映射的Employee
而不是emp_id
,因为映射是基于实体的。
这就是你需要的:
员工位置:
class EmployeeLocation
@Id
private int id;
@ManyToOne(cascade = CascadeType.ALL)
private Employee emp;
员工:
class Employee
@Id
private int emp_id;
@OneToMany(fetch=FetchType.EAGER, mappedBy="emp")
@JoinColumn(name = "emp_id")
private List<EmployeeLocation> employeeLocation;
注意:
不要错过为id
字段指定@Id
注释,以便
实体可以正确映射。
注意你使用的类型,Java
区分大小写,没有integer
类型,要么是int
要么是Integer
。
请注意,建议使用Set
而不是List
in
OneToMany
的休眠映射。
【讨论】:
这只是一个演示代码。我有我的项目,我面临这样的问题。我知道休眠,但我陷入了这个问题。我不想执行操作,我只想获取数据。我想获取员工数据,并且我想在其中包含员工位置列表对象 您的查询在哪里?您是如何获得这些数据的? 我正在使用 Criteria Api 获取数据。我正在从 Employee 表中获取数据,并且我也想要 EmployeeLocation 数据,所以基本上我想使用 Criteria 执行连接。所以为了执行加入,我需要在 Employee 中有 EmployeeLOcation 对象。但我没有得到数据本身 您的查询在哪里?你是怎么加入的?以上是关于Hibernate @OneToMany Mapping 获取记录的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate - OneToMany 单向映射 - SQLGrammarException
在 Hibernate/JPA 中保存一个带有子对象的对象 - @OneToMany
Hibernate @OneToMany 错误:键 'PRIMARY' 的重复条目 '0'