java Hibernate@Filter entity by@manytone字段
我试图在多对一关系字段上使用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 楼答案
尝试从筛选器定义中删除
stock
更新 所以这里的库存是相关表,而不是主表。您可以尝试加入以在中进行子选择