在JPA查询中使用Hibernate CompositeUserType
我正在使用CompsiteUserType来映射类“单元”:
class Unit {
long type;
Currency currency;
Currency crossCurrency;
}
('Money','XRate',...)的字段'crossCurrency'可能为空(例如'Money'没有交叉货币)。
CompositeUserType的'nullSafeSet'方法实现如下:
public void nullSafeSet(...) {
Unit unit = (Unit) value;
stmt.setLong(index, unit.type);
if(unit.type == UnitType.MONEY) {
stmt.setLong(index+1, unit.currency.id);
stmt.setNull(index+2, java.sql.Types.BIGINT);
} else if(unit.type == UnitType.XRate) {
stmt.setLong(index+1, unit.currency.id);
stmt.setLong(index+2, unit.crossCurrency.id);
} else {
...
}
}
现在我有一个JPA查询,试图根据他们的“单元”来查找实体:
SELECT p FROM Position WHERE p.unit = :unit
当执行这个查询时,Hibernate生成一个SQL查询:
SELECT id, ...
FROM positions p
WHERE (p unit_type, p unit_currency_id, p unit_cross_currency_id)=(?, ?, ?)
如果给查询的'单位'是'金钱',那么具体的查询是:
SELECT p.id, ...
FROM positions p
WHERE (p.unit_type, p.unit_currency_id, p.unit_cross_currency_id)=('money', 1, null)
在这种情况下,数据库中找不到匹配的行,因为查询的where子句检查'unit_cross_currency_id'是否等于'null',这永远不会匹配。
我在这里做错了什么?
如何在JPA查询中使用具有可能的空值的组合用户类型?
链接地址: http://www.djcxy.com/p/63819.html上一篇: Using Hibernate CompositeUserType in JPA Queries
下一篇: Passing empty list as parameter to JPA query throws error