java - Hibernate @Filter实体通过@ManyToOne字段

标签 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: 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 实体的“name”属性,因为我真的不想使用“stock_id = 10”执行该方法?

最佳答案

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

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

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

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

关于java - Hibernate @Filter实体通过@ManyToOne字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39999988/

相关文章:

java - Android:onClickListener方法未到达结束,因为它先结束

java - split() 分隔符之间没有任何内容 = 空字符串

java - 如何使用 hibernate 一般测试数据库连接

java - Spring JPA 映射 - 第一步

java - JPA 可嵌入 PK 和可为空字段

django 模板 - 解析字符串变量中的变量

java - 更新嵌套的 JsonNode 中的值

java - 按名称获取 Swing 组件

javascript - 在输入框上使用 css 属性 "filter: alpha(opacity=70);"和 "background-image: url(image.png);"

java - Kotlin 中具有现有 java.util.Predicate 实例的过滤器集合