2016-09-22 6 views
0

私は2つのテーブルprimary_tableとsecondary_tableを持っています。要するにJPA/Hibernate @SecondaryTable @PrimaryKeyJoinCloumnプライマリテーブルの非プライマリカラムを参照します

CREATE TABLE primary_table 
(
    primary_id INTEGER NOT NULL, 
    secondary_id INTEGER NOT NULL, 
    PRIMARY KEY(primary_id) 
) 
CREATE TABLE secondary_table 
(
    secondary_id INTEGER NOT NULL, 
    PRIMARY KEY(secondary_id) 
) 

:次のように

@Entity 
@Table(name = "primary_table") 
@SecondaryTable(name = "secondary_table", pkJoinColumns = 
@PrimaryKeyJoinColumn(name="secondary_id", referencedColumnName="secondary_id")) 
public class Primary{ 
    ... 
    @Id 
    @Column(name = "primary_id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    Long primaryId; 

    ... columns in the primary table 
    ... columns in the secondary table 
} 

テーブルである:二列の第一列は、非プライマリカラムを参照し、以下のように

Hibernateのエンティティが定義されていますプライマリテーブルしかし

、アプリを起動、休止状態は文句:

Caused by: org.hibernate.MappingException: Unable to find column with logical name: secondary_id in org.hibernate.mapping.Table(primary_table) and its related supertables and secondary tables 
at org.hibernate.cfg.Ejb3JoinColumn.checkReferencedColumnsType(Ejb3JoinColumn.java:828) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final] 

私は実際には主キーが主キーを参照してみましょう、と休止満たされている、主テーブルのprimary_idにreferencedColumnNameとを変更しました。しかし、私は従来のデータベースで作業しており、スキーマを変更することはできません。

私のコードで何が問題になっていますか?

多くの感謝!

答えて

0

プライマリテーブルのプライマリ列がプライマリテーブルのプライマリ以外の列を参照していましたが、これが問題です。事実、プライマリとセカンダリのテーブル間にManyToOne関係があり、このテーブルのセマンティクスに関係なく、ManyToOneとして扱われマッピングされる必要があります。

関連する問題