2017-03-01 16 views
2

別のテーブルへの参照を使用して複合主キーを取得しようとしています。私は多くの話題を見ましたが、私の場合は答えはありません。外部キーを使用した埋め込みID

私のデータベースでは、owner_idが追加されていないため、外部キーによって列が正しく作成されています。従業員がいなくても新しい記録を追加できます。 私はクラスA

データベースとして SQLLiteを使用する:あなたはかなり接近していた

@Column(name = "filename", unique = true) 
private String filename; 

@EmbeddedId 
private TimeSheetID id; 


@MapsId("owner_id") 
@JoinColumn(name = "owner_id", referencedColumnName = "employee_id") 
@ManyToOne 
private EmployeeeEntity employee; 

クラスB

public class TimeSheetID implements Serializable{ 

    private static final long serialVersionUID = 7469844076039968866L; 

    @Column(nullable = false, name = "period") 
    private String period; 

    @Column(nullable = false, name = "owner_id") 
    private String ownerId; 

    // … 

} 

クラスC

@Column(nullable = false) 
public String getName() { 
    return name; 
} 

@Id 
@Column(name = "employee_id") 
public String getEmployeeID() { 
    return employeeID; 
} 

@Column(nullable = false) 
public String getBusinessUnit() { 
    return businessUnit; 
} 

答えて

2

。すでに@Embeddableあなたがする必要はありませんで指定されている@Columnとしても

@MapsId("ownerId") 
@ManyToOne 
private EmployeeeEntity employee; 

代わり@MapsId注釈に列名を使用してのあなたは、その外部キーに対応するクラスのフィールド名を使用する必要があります再度指定してください。 referencedColumnNameは、デフォルトで永続プロバイダによって選択されるtarget idフィールドを指しているため、必要ありません。

関連する問題