2016-10-12 3 views
0

Я пытаюсь использовать 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»?

ответ

1

Попробуйте удалить stock из определения фильтра

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

UPDATE Так запас здесь связана таблица не основная таблица. Вы можете попытаться присоединиться к подзапрос с IN

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

После попытки этого я получаю: «org.postgresql.util.PSQLException: ОШИБКА: колонка stock_daily_records0_.name не существует». – Blaskowitz

+0

Hibernate здесь видит «имя» как столбец «stock_daily_records», но на самом деле это столбец «Stock» – Blaskowitz

+0

Обновленный ответ с другим подходом – StanislavL