使用 JPA ManytoOne 从父 Table 检索字段
Retrieving Field from Parent Table with JPA ManytoOne
我假设有两个 tables t_document 和 t_employee。 table t_document 有两个字段,id 和 owner_id,其中 owner_id 与 t_employee 有外键关系。 table t_employee 有两个字段,id 和 name。我的难题是,如何设置 JPA 实体(使用版本 1.x),以便以下 NamedNativeQuery 获取文档以及所有者的姓名并正确填充实体?
SELECT d.id, e.name
FROM t_document d
JOIN t_employee e ON d.owner_id = e.id;
对于初学者,我已经包含了我的文档的基本开头部分 class。
@Entity
@Table(name = "T_DOCUMENT")
public class Document
{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID", nullable = false)
private Integer id;
}
根据关系(我假设 OneToMany,因为一个员工可以拥有多个文档),您可以按如下方式设计 class:
@Entity
@Table(name="T_EMPLOYEE")
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="ID")
private long id;
@Column(name="NAME")
private String name;
@OneToMany(mappedBy="employee")
Collection<EmployeeDocument> documents = new ArrayList<>();
}
@Entity
@Table(name="T_DOCUMENT")
public class EmployeeDocument {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="ID")
private long id;
@ManyToOne
@JoinColumn(name="OWNER_ID")
private Employee employee;
}
这应该符合您的目的。
我假设有两个 tables t_document 和 t_employee。 table t_document 有两个字段,id 和 owner_id,其中 owner_id 与 t_employee 有外键关系。 table t_employee 有两个字段,id 和 name。我的难题是,如何设置 JPA 实体(使用版本 1.x),以便以下 NamedNativeQuery 获取文档以及所有者的姓名并正确填充实体?
SELECT d.id, e.name
FROM t_document d
JOIN t_employee e ON d.owner_id = e.id;
对于初学者,我已经包含了我的文档的基本开头部分 class。
@Entity
@Table(name = "T_DOCUMENT")
public class Document
{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID", nullable = false)
private Integer id;
}
根据关系(我假设 OneToMany,因为一个员工可以拥有多个文档),您可以按如下方式设计 class:
@Entity
@Table(name="T_EMPLOYEE")
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="ID")
private long id;
@Column(name="NAME")
private String name;
@OneToMany(mappedBy="employee")
Collection<EmployeeDocument> documents = new ArrayList<>();
}
@Entity
@Table(name="T_DOCUMENT")
public class EmployeeDocument {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="ID")
private long id;
@ManyToOne
@JoinColumn(name="OWNER_ID")
private Employee employee;
}
这应该符合您的目的。