Java 通过@ManyToOne字段休眠@Filter实体

Java 通过@ManyToOne字段休眠@Filter实体,java,hibernate,filter,field,many-to-one,Java,Hibernate,Filter,Field,Many To One,我尝试在多对一关系字段上使用Java的Hibernate@Filter,但当我启用该筛选器并尝试使用AJAX中的StockDailyRecord服务调用getAll方法时,我得到以下结果: HTTP Status 500 - Request processing failed; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: coul

我尝试在多对一关系字段上使用Java的Hibernate@Filter,但当我启用该筛选器并尝试使用AJAX中的StockDailyRecord服务调用getAll方法时,我得到以下结果:

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”中的实际列更改过滤器并将其与我希望的id进行比较时,过滤器可以正常工作

@Filter(name="stockDailyRecordFilter", condition="stock_id = 10")
以下是我如何在StockDailyRecordService中启用筛选器:

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

另外,当我在其他属性上尝试过滤器时(比如StockDailyRecord有字段“description”),它工作得很好。有没有办法从筛选条件中访问Stock实体的“name”属性,因为我真的不想使用“Stock_id=10”进行此操作?

尝试从筛选定义中删除
Stock

@Filter(name="stockDailyRecordFilter", condition="name = 'My stock'")
更新 所以这里的库存是相关表,而不是主表。您可以尝试在中加入子选择

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

尝试后,我得到:“org.postgresql.util.psqleexception:错误:列stock\u daily\u records0\uu.name不存在”。Hibernate在这里将“name”视为“stock\u daily\u records”列,但它实际上是一个“stock”表列,使用另一种方法更新了答案谢谢,这是一个很大的帮助!但是我不明白,为什么Hibernate不允许像在NamedQuery中那样使用“stock.name”方法?