【问题标题】:Hibernate @Filter entity by @ManyToOne field通过@ManyToOne 字段休眠@Filter 实体
【发布时间】:2023-03-22 08:41:01
【问题描述】:

我正在尝试在多对一关系字段上使用 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 具有“描述”字段),它工作得很好。有没有办法从过滤条件访问 Stock 实体的“名称”属性,因为我真的不想使用“stock_id = 10”的方法?

【问题讨论】:

    标签: java hibernate filter field many-to-one


    【解决方案1】:

    尝试从过滤器定义中删除stock

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

    更新 所以这里的库存是相关表而不是主表。您可以尝试加入以 IN 进行子选择

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

    【讨论】:

    • 尝试后我得到:“org.postgresql.util.PSQLException: ERROR: column stock_daily_records0_.name 不存在”。
    • Hibernate 在这里将“name”视为“stock_daily_records”列,但实际上是“stock”表列
    • 用另一种方法更新答案
    • 谢谢,帮了大忙!
    • 我不明白,为什么 Hibernate 不允许像在 NamedQuery 中那样使用“stock.name”方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2021-02-02
    相关资源
    最近更新 更多