2016-10-12 3 views
0

多対1の関係フィールドでJavaのHibernate @Filterを使用しようとしていますが、フィルタを有効にしてAJAX IのStockDailyRecordサービスを使用してgetAllメソッドを呼び出そうとすると私は、しかし、私は、データベース「stock_id」で実際の列でフィルタを変更したときに@ManyToOneフィールドによるHibernate @Filterエンティティ

@Entity 
@Table(name = "stock_daily_record", catalog = "mkyong") 
@FilterDef(name="stockDailyRecordFilter") 
@Filters({ 
    @Filter(name="stockDailyRecordFilter", condition="stock.name = 'My stock'"), 
}) 
public class StockDailyRecord extends Entity implements Serializable { 
     ... 
    @ManyToOne 
    @JoinColumn(name = "stock_id", referencedColumnName = "id", nullable = false) 
    public Stock getStock() { 
     return this.stock; 
    } 
} 

とidと比較:

HTTP Status 500 - Request processing failed; 
nested exception is javax.persistence.PersistenceException: 
org.hibernate.exception.SQLGrammarException: could not extract ResultSet 

これは私がフィルタを定義し、私の実体である:これを取得しますフィルタを例外なく動作させたい

また
Session hSession = getSession(); 
    if (isAnonymous) { 
     hSession.enableFilter("stockDailyRecordFilter"); 
    } else { 
     hSession.disableFilter("stockDailyRecordFilter"); 
    } 

、私は他のプロパティにフィルタをしようとすると、(StockDailyRecordがフィールド「説明」を持っていると言う)それだけで正常に動作します:ここで

@Filter(name="stockDailyRecordFilter", condition="stock_id = 10") 

は私がStockDailyRecordServiceでフィルタを有効にする方法です。 "stock_id = 10"のアプローチを本当にしたくないので、フィルタ条件からStockエンティティの "name"プロパティにアクセスする方法はありますか?

答えて

1

は、フィルタ定義

@Filter(name="stockDailyRecordFilter", condition="name = 'My stock'") 

UPDATE だからここにストックが関連しているテーブルではないメインテーブルからstockを削除するようにしてください。 「org.postgresql.util.PSQLException:ERROR:列stock_daily_records0_.nameが存在しない」あなたは私が手にこれをしようとして終えた後に

condition="stock_id in (select id from stock where name = 'My stock')" 
+0

で副選択して参加しようとすることができます。 – Blaskowitz

+0

ここでHibernateは "stock_daily_records"列として "name"を参照しますが、実際には "在庫"テーブル列です – Blaskowitz

+0

別のアプローチで回答が更新されました – StanislavL

関連する問題