当前位置: 首页 > 知识库问答 >
问题:

通过@manytone字段Hibernate@Filter实体

夹谷飞龙
2023-03-14

我试图在多对一关系字段上使用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”这个方法?

共有1个答案

乜明朗
2023-03-14

尝试从过滤器定义中删除库存

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

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

condition="stock_id in (select id from stock where name = 'My stock')"
 类似资料:
  • 问题内容: 我正在寻找一种通过Spring在由Hibernate从数据库加载的bean中注入某些属性的方法。 例如 我是否可以配置Spring,以便每当Hibernate创建Student类的对象时,在某些applicationContext文件中定义的某些属性就会随对象创建一起注入? 问题答案: 为此,可以使用AspectJ类与注解进行编织。这将自动连接具有Spring依赖项的带注释类的任何实例

  • 我有一个实体“事件”,它与实体“组织”有ManyToOne关系。所以一个组织可以有多个事件。 我最初想做的是使用组织实体的属性过滤实体事件。所以基本上,当我获取事件时,只返回具有Organization.code=: codeParam的事件。 为了实现这一点,我实现了一个hibernate过滤器: ... ... 不幸的是,根据Hibernate团队在Hibernate论坛上的帖子,这是不可能的

  • 我对spring rest api有点陌生。我有两个具有单向多对一关系的实体。 假设我在城市表中已经有一些城市。当我想使用http post方法添加城市id为2的新用户时,我必须执行以下操作: 如您所见,我必须首先将城市ID分组到城市实体中。没有分组,我怎么做?这样地:

  • 问题内容: 我想用Hibernate映射超类中的通用字段。 我的母亲班是: 一个子类: 如您所见,我将覆盖value字段以指定要在数据库中使用的列。我的表ParameterValue由几列组成,每种类型对应一列。 但是hibernate抱怨: 好的,但是超类中getValue的良好配置是什么?(我在“需要帮助的地方”发表了评论) 问题答案: 我很确定您不能将单个Java属性映射到三个不同的列。您将

  • 保存@manytone实体后,重复键值违反了唯一约束 我试图通过spring数据保存一个实体A,其中另一个实体B具有唯一的字段名。如果数据库中已经存在B,则将抛出异常“重复键值违反唯一约束”B_name_key。详细信息:key(B_name)=(someName)已经存在。 我得到组织。postgresql。util。PSQLException:错误:重复的键值违反唯一约束“b_name_key

  • 以下是我要保存(创建/更新)的实体模型: 有两种方法可以更新此实体: < li >第一个更新除< code>notified属性以外的所有属性的人 < li >第二个更新< code>notified属性的仅 有没有办法告诉Hibernate忽略某个特定方法的某些字段?我需要创建两个不同的特定dao方法吗?我是否需要为经典的< code>save方法保留< code>updatable=false