0

我是 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 + "%");

我使用“cast”是因为 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));            

“描述”在 XXX 实体类中具有字符串类型。

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

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

我可以修复它吗?

4

1 回答 1

0

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

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

如果这种方式你强制 Hibernate 将 mvarchar 列视为标准 varchar。

于 2013-08-04T14:20:57.117 回答