我有一个关于将字符串值(它是一个存储在db中的数字作为nvarchar)与JPA Criteria API中的数字进行比较的问题。有没有可能这样做?我已尝试使用方法.as(Class),但它没有用。它总是比较两个字符串,而不是两个数字。
编辑:
我在表格中有一列(name - > fieldValue)。它存储数字,但是以文本格式存储nvarchar。我想在JPA CriteriaApi中创建谓词,它给我这个表中的行,其中fieldValue大于某个值。我试过了:
criteriaBuilder.gt(c.get("fieldValue").as(Long.class), someValue);
但是ID不起作用
答案 0 :(得分:0)
一种可能性是使用Converter
类注释属性。这样,Java Entity
字段为Long
,但数据库列为String
。
@Converter
public class LongToStringConverter implements AttributeConverter<Long,String> {
@Override
public String convertToDatabaseColumn(Long attribute) {
return attribute.toString();
}
@Override
public Long convertToEntityAttribute(String dbData) {
return Long.parseLong(dbData);
}
}
有了这个,CriteriaQuery
非常简单。
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Entity> q = cb.createQuery(Entity.class);
Root<Entity> l = q.from(Entity.class);
q.select(l).where(cb.equal(l.get("fieldValue"), 12344321L));
Entity r = em.createQuery(q).getSingleResult();
System.out.println(r);