JPA Criteria API查询中的字符串

时间:2016-03-10 20:16:25

标签: jpa criteria-api

我有一个关于将字符串值(它是一个存储在db中的数字作为nvarchar)与JPA Criteria API中的数字进行比较的问题。有没有可能这样做?我已尝试使用方法.as(Class),但它没有用。它总是比较两个字符串,而不是两个数字。

编辑:

我在表格中有一列(name - > fieldValue)。它存储数字,但是以文本格式存储nvarchar。我想在JPA CriteriaApi中创建谓词,它给我这个表中的行,其中fieldValue大于某个值。我试过了:

criteriaBuilder.gt(c.get("fieldValue").as(Long.class), someValue);

但是ID不起作用

1 个答案:

答案 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);