2017-10-17 10 views
0

私はクラスを持っているので、別のマッピングされたエンティティからただ1つの列が必要です。私は完全な参照を持つことを無効にすることを好むだろう。これを行う方法はありますか?私は徹底的にグーグルで語ったが、私はその用語を正しいものにしてはならない。Hibernate - エンティティ全体ではなく単一の列に結合する

を説明:

@Entity 
@Table(name = "bar") 
@Data 
public class Bar{ 
    @Id 
    @Column(name = "itemid") 
    private long id; 

    @Column(name = "other_name") 
    private String otherName; 

    @OneToOne 
    @PrimaryKeyJoinColumn 
    private Foo foo; 
} 

しかし、私が欲しい:

@Entity 
@Table(name = "foo") 
@Data 
public class Foo { 
    @Id 
    @Column(name = "itemid") 
    private long id; 

    @Column(name = "name") 
    private String name; 
} 

この作品

@Entity 
@Table(name = "bar") 
@Data 
public class Bar{ 
    @Id 
    @Column(name = "itemid") 
    private long id; 

    @Column(name = "other_name") 
    private String otherName; 

    @OneToOne 
    @JoinColumn(name = "itemid") 
    @Formula("SELECT name FROM FOO v where v.id = id") 
    // Something here...not sure what. Where name is the name from Foo 
    private String name; 
} 
+0

'@ OneToOne'と' @ JoinColumn'を使わずに最後のスニペットを試しましたか? '@ Formula'だけ? – corsiKa

答えて

1

あなたはカップルのオプションがあります。

最初に、@Formulaを使用してください。そこに他の注釈はありません。@Formulaを使用してください。これはまさにあなたが期待することを行うはずです。

また、これが頻繁に必要な場合は、2つの列を結合し、元の表ではなくそのビューに基づいてオブジェクトを作成するビューを作成できます。

+0

私はOneToOneとJoinColumnを落として式だけを残しましたが、 "ResultSet; SQL [n/a]"を抽出できませんでした。私はこの "どこ"の部分が必要ですが、それが正しいかどうかはわかりません。 – Rig

0

私はあなたがそうすべきではないと信じています。エンティティクラスには、データの格納方法のみを記述する必要があります。あなたは、想定されていないロジックを追加しています。

他のテーブルに外部キーを格納しないとどうなるかを検討してください。エンティティが変更された場合は、更新を取得しません。

関連する問題