2016-10-11 11 views
0

レガシーデータベースからデータを取得しているため、スキーマ全体で制御できません。JPAの余分なwhere句を使用してManyToManyを制限する方法

誤った一致を削除するには、静的な値を別の列でチェックする必要があります。

create table mySource (
id int, 
... 
) 

create table aRelation (
srcId int, 
myFK int, 
relationLimit varchar 
) 

create table aTarget (
id int, 
... 
myFK int, 
aLimit varchar, 
... 
) 

上記の「relationLimit」および/または「aLimit」は、静的値と一致する必要があります。

私は、標準の注釈を見つけることができます。これは文書で明らかである場合

aLimit = "Something" 
relationLimit="SomethingElse" 

@ManyToMany(fetch = FetchType.LAZY) 
@JoinTable(
    name = "aRelation", 
    joinColumns = { 
     @JoinColumn(name = "srcId") }, 
     @inverseJoinColumns = { 
      @JoinColumn(name = "myFK", referencedColumnName = "myFK") 
    }) 
private List<ATarget> targets; 

をしかし、私は要件(複数可)を注釈付けする方法を見つけることができません教えてください私はどこでそれを読むのか。

+0

地図を自分のクラスを見つけることができます。それで、あなたはポータブルなJPAのやり方でそれを行うことができます。 M-Nのジョインテーブルに「余分なカラム」がありません –

+0

なぜ条件付きでJPQLクエリを使用しないのですか? – ujulu

+0

@NeilStockton私はできますが、私のアプリケーションには何の振る舞いもデータもないクラスのためにクラスを導入するのは悪いです。上記の余分なフィールドは、同じデータベースを使用している他のアプリケーションによって使用されています。私はそのサブセットを表示しようとしています。 –

答えて

1

Hibernateを使用する場合は、@Filterアノテーションをエンティティで試すことができます。あなたは中間クラスと2 1-N関係を持っているように、このトピックに関する

@Filter(name="betweenLength", condition="aLimit = 'Something' and relationLimit='SomethingElse'") 

よりますが、正しくhere

関連する問題