2011-10-19 5 views
2

私のDBには2つのテーブルがあります。 IDとその他の列を含む表1。 Table2は私がtable2のidとしてtable1からのPKを持っている関係テーブルですが、私はTable2のIDを使用せず、いくつかの値を他のランダムなデータに保持します。Idカラムは他のテーブルJPAエンティティから来ます

JPAでは@Idアノテーションを使用する必要があります。私の問題は、table1のエンティティをtable2エンティティの@Idとして入れることです。これは可能ですか?はいの場合、どうですか?これまで

コード: 表1

@Entity 
@Table(name="Log", schema="logs") 
@PersistenceUnit(name="domas") 
@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorColumn(name="type", discriminatorType = DiscriminatorType.STRING) 
public abstract class Log implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name="id", nullable=false) 
    public String id; 

    @Column(name="type", nullable=false) 
    @Enumerated(EnumType.STRING) 
    public LOG_TYPE type; 
// and alot more not related code 

表あなたが@OneToOne属性名IDと型LogRelationとは逆側を持っていない場合は2

@Entity 
@Table(name="Log_Entity", schema="relations") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name = "relationType", discriminatorType = DiscriminatorType.STRING) 
public abstract class LogRelation implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @OneToOne(mappedBy="id") 
    public Log log; 

// and alot more not related code 
+0

別のテーブルのテーブルIDを作成しようとしていますか?または、あるテーブルからいくつかのフィールドを選択しようとしていて、別のテーブルの__複合主キー_を作成しようとしていますか?もしそうなら、 '@ Embeddable'と' @ EmbeddedId'という注釈をチェックアウトする必要があります。 –

+0

私はテーブル2から実際のID列を持っていないので、Table2のEntityを宣言する必要がないように、Table1からTable2にPKを取得しようとしています。しかし、JPAはId-annotationを使用するように強制しています。 – Marthin

答えて

3

このmappedByは意味がありません。 :

@OneToOne(mappedBy="id") 

次のように動作します。

@Id 
@JoinColumn(name="lr_id")//or whatever column name you prefer 
@OneToOne 
Log log; 
+0

このクラス[class com.foo.bar]は、IdClassが生成されることを定義していません。 – user2083529

関連する問題