通过@ManyToOne 字段休眠@Filter 实体
Hibernate @Filter entity by @ManyToOne field
我正在尝试在多对一关系字段上使用 Java 的 Hibernate @Filter,但是当我启用过滤器并尝试使用来自 AJAX 我明白了:
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"),它工作得很好。有没有办法从 Filter 条件访问 Stock 实体的 "name" 属性,因为我真的不想使用 "stock_id = 10"?
尝试从过滤器定义中删除 stock
@Filter(name="stockDailyRecordFilter", condition="name = 'My stock'")
更新
所以这里的股票是相关的 table 而不是主要的 table。您可以尝试使用 IN
加入子选择
condition="stock_id in (select id from stock where name = 'My stock')"
我正在尝试在多对一关系字段上使用 Java 的 Hibernate @Filter,但是当我启用过滤器并尝试使用来自 AJAX 我明白了:
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"),它工作得很好。有没有办法从 Filter 条件访问 Stock 实体的 "name" 属性,因为我真的不想使用 "stock_id = 10"?
尝试从过滤器定义中删除 stock
@Filter(name="stockDailyRecordFilter", condition="name = 'My stock'")
更新 所以这里的股票是相关的 table 而不是主要的 table。您可以尝试使用 IN
加入子选择condition="stock_id in (select id from stock where name = 'My stock')"