0

JPAを使用して次の要件をマッピングする方法を知りたい

次の属性を持つプロジェクトエンティティがあります

projectNo (auto generated)
projectRequestedBy
approvedBy

従業員エンティティ

employeeNumber (primary key)
employeeName
employeeTitle
employeePhone

employeeNumberProject エンティティの projectRequestedBy 属性と approvalBy 属性を効率的にマッピングする方法を知りたいですか?

また、エンティティクラスに対してクエリを実行するときにemployeeName、属性を表示する方法を知りたいですか? プロジェクトレコードを取得しようとする場合、理想的には次のレコードが必要ですemployeeTitleemployeePhoneProject

projectNo projectRequestedByName projectRequestedByTitle  approvedByName approvedByTitle

どんな助けも非常に高く評価されます。

更新 1

プロジェクトエンティティ

@Entity
@Table(name = "PROJECT")
public class Project

private Long projectNo;

@ManyToOne
@JoinColumn(name="EMP_NUMBER", insertable =false, updatable=false)
private Employees employees;

従業員エンティティ

@Entity
@Table(name = "EMPLOYEES")
public class Employees {
@OneToMany  
@JoinColumn(name="EMP_NUMBER", nullable = false)
private Collection<Project> project;
4

1 に答える 1

1

わかった。まず、マッピングが間違っています。双方向の OneToMany アソシエーションでは、片側が逆側でなければならず、これはmappedBy属性によって具体化されます。ドキュメントに示されているように

実際には、従業員とプロジェクトの間に 2 つの OneToMany/ManyToOne があります。従業員が多くのプロジェクトを要求します。従業員は多くのプロジェクトを承認します。

したがって、マッピングは次のようになります

@Entity
public class Employee
    @OneToMany(mappedBy = "requester")
    private Set<Project> requestedProjects;

    @OneToMany(mappedBy = "approver")
    private Set<Project> approvedProjects;
}

@Entity
public class Project
    @ManyToOne
    private Employee requester;

    @ManyToOne
    private Employee approver;
}

1 回のクエリでプロジェクトの依頼者と承認者を取得するには、

select p from Project p
left join fetch p.requester
left join fetch p.approver
于 2013-07-22T13:41:59.083 に答える