多対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"プロパティにアクセスする方法はありますか?
で副選択して参加しようとすることができます。 – Blaskowitz
ここでHibernateは "stock_daily_records"列として "name"を参照しますが、実際には "在庫"テーブル列です – Blaskowitz
別のアプローチで回答が更新されました – StanislavL