JPA标准API查询中的字符串
我有一个关于比较字符串值(它是作为nvarchar存储在db中的一个数字)和JPA标准API中的一个数字的问题。有没有可能这样做?我试过使用method.as(Class),但没有成功。它总是比较两个字符串,而不是两个数字 编辑: 我在表中有一列(名称->字段值)。它存储数字,但采用文本格式nvarchar。我想在JPA CriteriaApi中做一个谓词,它给我这个表中的行,其中fieldValue大于某个值。我试过:JPA标准API查询中的字符串,jpa,criteria-api,Jpa,Criteria Api,我有一个关于比较字符串值(它是作为nvarchar存储在db中的一个数字)和JPA标准API中的一个数字的问题。有没有可能这样做?我试过使用method.as(Class),但没有成功。它总是比较两个字符串,而不是两个数字 编辑: 我在表中有一列(名称->字段值)。它存储数字,但采用文本格式nvarchar。我想在JPA CriteriaApi中做一个谓词,它给我这个表中的行,其中fieldValue大于某个值。我试过: criteriaBuilder.gt(c.get("fieldValue"
criteriaBuilder.gt(c.get("fieldValue").as(Long.class), someValue);
但是id不起作用一种可能是使用
转换器
类对属性进行注释。这样,Java实体
字段是一个长
,而数据库列是一个字符串
@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);
}
}
“它不起作用”。这告诉人们很多。从来没有想过他们想知道生成了什么SQL,或者您遇到了什么异常?
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);