标准api表达与演员

时间:2013-08-04 10:18:09

标签: java hibernate jpa expression predicate

我是jpa的新手,需要这样的东西:

TypedQuery<XXX> typedQuery = em.createQuery("select c from XXX c where cast(c.description as string) like :name", XXX.class);
typedQuery.setParameter("name", startStr + "%");

我正在使用“强制转换”,因为c.description有一个不寻常的类型(在1c的postgresql补丁中键入“mvarchar”)。这有效,但我必须使用谓词:

ParameterExpression<String> parameter = builder.parameter(String.class, "name");
predicate = builder.like(root.<String>get("description"), parameter);    
query.where(builder.and(predicate));            

“description”在XXX实体类中具有String类型。

执行后出错: 错误:运算符不存在:mvarchar ~~字符变化

我试着把“as”(root.get(“description”)。as(String.class)),但结果是一样的。

我能解决吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试创建自定义方言,将mvarchar类型注册为nvarchar。

public class MyDialect extends PostgreSQLDialect {
    registerColumnType(Types.VARCHAR, 255, "mvarchar($l)");
}

如果这样,你强制Hibernate将mvarchar列视为标准varchar。