2016-09-10 33 views
1

外部キーを持たず、データベース構造を変更しない別のエンティティにリンクするEntityにプロパティを(仮想的に)マップしたいと思います。関連するテーブルにマップするキーのゲッターがすでにあります。外部キーなしでhibernate/JPAテーブルを照合する方法

既存のデータベース。バスケット

表卵

+----------------------+------------------+------+-----+---------+-------+ 
| Field    | Type    | Null | Key | Default | Extra | 
+----------------------+------------------+------+-----+---------+-------+ 
| id     | int(10) unsigned | NO | PRI | 0  |  | 
| pid     | varchar(60)  | NO |  |   |  | 

表バスケット

+----------------------+------------------+------+-----+---------+-------+ 
| Field    | Type    | Null | Key | Default | Extra | 
+----------------------+------------------+------+-----+---------+-------+ 
| id     | int(10) unsigned | NO | PRI | 0  |  | 
| pid     | varchar(60)  | NO |  |   |  | 

エンティティ卵

@SuppressWarnings("serial") 
@Entity 
@Table(name = "egg") 
public class Egg implements java.io.Serializable { 
    private long id; 
    private String pid; 
    ... 
    @Column(name = "pid") 
    public String getPid() { 
    return this.pid; 
    } 

エンティティは、すでに卵用として設定されたPIDゲッターと類似しています。

私は結合をモデル化したいと思います。

LEFT JOIN egg ON basket.pid = egg.pid 

どちらの表にもpidをマッピングする外部キーはありません。

私は卵の実体でバスケットのプロパティを作成しようとしました。

@JoinColumn(name = "pid", referencedColumnName = "pid", updatable = false, insertable = false) 
public Basket getBasket(

もちろん、hibernateは表に「バスケット」列がないと不平を言う。

この卵のバスケットはどうすれば入手できますか?

+0

は '@ ManyToMany'注釈欠落していない' @ JoinColumn'前に? –

答えて

0

@JoinColumnsOrFormulasアノテーションを試してみてください。このような

何か作業をする必要があります:

@ManyToOne 
@JoinColumnsOrFormulas({ 
    @JoinColumnOrFormula([email protected](value="(SELECT b.id FROM Basket b WHERE b.pid = pid)", referencedColumnName="id")), 
    @JoinColumnOrFormula(column = @JoinColumn(name = "pid", referencedColumnName="pid")) 
}) 
private Basket getBasket() { 
    return this.basket; 
} 
関連する問題