Я пытаюсь использовать Hibernate @Filter Java в поле с несколькими отношениями, но когда я включаю фильтр и пытаюсь вызвать метод getAll, используя службу StockDailyRecord из AJAX I получить это:Hibernate @Filter entity by @ManyToOne field
HTTP Status 500 - Request processing failed;
nested exception is javax.persistence.PersistenceException:
org.hibernate.exception.SQLGrammarException: could not extract ResultSet
Это моя сущность, в которой я определяю фильтр:
@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;
}
}
Однако при изменении фильтра с фактической колонкой в «stock_id» баз данных и сравнить его с идентификатором I хотите, чтобы фильтр работал без каких-либо исключений.
@Filter(name="stockDailyRecordFilter", condition="stock_id = 10")
Вот как включить фильтр в StockDailyRecordService:
Session hSession = getSession();
if (isAnonymous) {
hSession.enableFilter("stockDailyRecordFilter");
} else {
hSession.disableFilter("stockDailyRecordFilter");
}
Кроме того, когда я пытаюсь фильтр на другие свойства (скажем, StockDailyRecord имеет поле «описание») он работает просто отлично. Есть ли способ получить доступ к свойству «имя» объекта «Акция» из условия «Фильтр», потому что я действительно не хочу делать подход с помощью «stock_id = 10»?
После попытки этого я получаю: «org.postgresql.util.PSQLException: ОШИБКА: колонка stock_daily_records0_.name не существует». – Blaskowitz
Hibernate здесь видит «имя» как столбец «stock_daily_records», но на самом деле это столбец «Stock» – Blaskowitz
Обновленный ответ с другим подходом – StanislavL