2012-04-30 25 views
6

論理的に削除されたレコード(つまりactive=false)は、@ManyToOneマッピングで問題の原因となっています。複数の結果が結合列によって返されているためです。ManyToOne with where句

私は私が達成できると思っていた active=trueレコードを含める必要があり

によって:しかし

@ManyToOne 
@NotFound(action = NotFoundAction.IGNORE) 
@JoinColumn(name = "site_id", referencedColumnName = "site_id", insertable = false, updatable = false) 
@WhereJoinTable(clause = "active=true") 
private Site site; 

、それは休止状態(?おそらくその唯一の有効なOneToMany用)以来で使用されていないWhereJoinTableように思えますactive=trueは生成されたSQL(ログ)には表示されず、問題は解決しません。

ManyToOneの参加にwhere句を含めることはできますか?

答えて

2

@WhereJoinTableは@ManyToOneではサポートされていません。 5年後の件名については、バグHHH-4335が公開されています。私は、バグレポートで述べたように(読み取り専用アクセスの場合)ビューを使用する点を除いて、回避策については何も知らない。

+0

はつまり私は、読み取り専用 'ActiveSite'実体を持って、再マッピングし、同じテーブルへとマッピングにフィルタをかけることが可能であるのですか? – pstanton

+0

はい、そうすることができます。しかし、予想通り、ActiveSiteとSiteのインスタンス間の接続はHibernateには不明です。したがって、対応するSiteに加えられた変更は、ActiveSiteがデータベースから読み取られる(またはリフレッシュされる)ときのみ、ActiveSiteに反映されます。 –

+0

しかし、この場合は受け入れられますが、自分の '@ Entity'に' @Where(clause = "active = true") 'を使用しようとしており、冬眠は' site0_.active = site0_に変換しています。本当の '..あなたが私がそれを解決するのを手助けすることができれば私はあなたにティックを与えるでしょう(あなたがあなたの答えにいるので..)助けてくれてありがとう! – pstanton

1

@JoinColumnOrFormula注釈は、適切な回避策

+0

これは質問に対する回答ではありません。議論や非回答関連の投稿にコメントを使用してください – Moseleyi