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,就像 hibernate 会自己生成它一样,查询工作正常。

有任何想法吗?

附上一些配置信息:

  • 休眠版本:3.6.10.Final
  • jdbc 驱动程序:db2jcc 3.61.65
  • 方言:org.hibernate.dialect.DB2Dialect
  • 字段声明:
     @Column(name = "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 回答