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】:

您需要在EmployeeLocationJoinColumn 上映射一些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 @OneToMany 的意外行为

在 Hibernate/JPA 中保存一个带有子对象的对象 - @OneToMany

Hibernate @OneToMany 错误:键 'PRIMARY' 的重复条目 '0'

Hibernate如何正确删除@OneToMany中的孩子?

Hibernate/JPA:获取 OneToMany 关系的一个(第一个)元素