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

c.description には通常とは異なる型 (postgresql patch for 1c の型 "mvarchar") があるため、"cast" を使用しています。これは機能しますが、述語を使用する必要があります。

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 に答える