1

JPA を休止状態で使用していますが、次の JPQL クエリで問題が発生しています

final Query query = getEntityManager().createQuery(
            "select u from User u where u.username = :username")
query.setParameter("username", "a"); 

DB2 V9.7 データベースを使用すると、ユーザー名が「a」のユーザーが存在する場合でも、クエリによって NoResultException が発生します。この問題は、ユーザー名の列の型が char の場合にのみ発生します。列の型を varchar に変更すると、休止状態が自分で生成するように、クエリは正常に機能します。

何か案は?

いくつかの構成情報を同封:

  • 休止状態のバージョン: 3.6.10.Final
  • jdbc ドライバー: db2jcc 3.61.65
  • 方言: org.hibernate.dialect.DB2Dialect
  • フィールド宣言:
     @Column(名前 = "USER_NAME"、長さ = 50)
     @NotNull
     @サイズ(最大 = 50)
     プライベート文字列のユーザー名。
    
  • ユーザー型宣言 @TypeDef(name = "trimmedString", defaultForType = String.class, typeClass = TrimmedStringUserType.class)
4

1 に答える 1

0

Hibernate は String を VARCHAR 型にマップします。これはここで説明されています

http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/types.html

確実に char にマップするには、ここで述べたようにカスタム db2 方言で指定する必要があります。

JPA/Hibernate DDL 生成; CHAR と VARCHAR

于 2012-12-04T10:16:11.857 に答える