使用JPA ManytoOne从父表中检索字段

时间:2015-09-01 15:21:55

标签: java hibernate jpa many-to-one

我假设有两个表t_document和t_employee。表t_document有两个字段,id和owner_id,owner_id与t_employee有外键关系。表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;

对于初学者,我已经包含了我的Document类的基本开头。

@Entity
@Table(name = "T_DOCUMENT")
public class Document
{
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "ID", nullable = false)
    private Integer id;

}

1 个答案:

答案 0 :(得分:1)

根据关系(我假设OneToMany为一个员工可以拥有多个文档),您可以按照以下方式设计您的课程:

@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;
}

这应该服务于你的目的。