2016-10-18 7 views
0

エンティティマップ共有プライマリキーを使用すると、Hibernateによって作成されたSQLに問題があります。Hibernate:HQLで共有プライマリキーを使用

@Entity 
@Column(name = "employee_table") 
public class EmployeeEntity { 

    @Id 
    @Column(name = "id") 
    @SequenceGenerator 
    @GeneratedValue 
    private Long id; 

    @OneToOne(fetch = FetchType.LAZY) 
    @PrimaryKeyJoinColumn 
    private EmployeeDetailsEntity employeeDetailsEntity; 
} 

@Entity 
@Table(name = "employee_details") 
public class EmployeeDetailsEntity { 

    @Id 
    @Column(name = "id") 
    private Long id; 

    // additional attributes 

} 

私は詳細を持っているすべての従業員を選択したい:私はここに私の実体だJPA 2.1を使用して5.2.2

を休止してい

select e from EmployeeEntity e where e.employeeDetailsEntity is not null; 

選択Hibernateが生成されたことにされます:

select employeeen0_.id from employee_table employeeen0_ where employeeen0_.id is not null; 

私が間違っていることを説明してください。これを解決するのに役立つでしょうか?

+0

どのJPAバージョンをお使いですか? – dcalap

+0

JPAとHibernateの情報を追加しました。 – Dmitry

+0

このリンクをチェックしましたか? http://stackoverflow.com/a/6839336/1230748 – dcalap

答えて

0

感謝コメントするすべての人に 問題は、EmployeeEntity主キーを使用するEmployeeDetailsEntityの@PrimaryKeyJoinColumnで、このPKを別の(EmployeeDetailsEntity)エンティティと共有しているため、HibernateがnativeIdentityのnullを使用しているかどうかを確認するときです。

マッピングを変更したくない(できない)場合は、hqlクエリでjoinを使用するか、@OneToOneマッピングを変更します。

1

あなたは従業員の "向こう側" に欠けているように見えます - >をEmployeeDetails関係マッピング:

Employeeエンティティ:

private EmployeeDetails employeeDetails; 

    @OneToOne(mappedBy = "employee", fetch = FetchType.LAZY) 
    public EmployeeDetails getEmployeeDetails() { 
     return employeeDetails; 
    } 

をEmployeeDetailsエンティティ:

private Employee employee; 

    @OneToOne(optional = false) 
    @JoinColumn(name = "EMPLOYEE_ID") 
    public Employee getEmployee() { 
     return employee; 
    } 
関連する問題