【问题标题】:How to return an Enum using the addScalar() method with Hibernate如何使用带有 Hibernate 的 addScalar() 方法返回枚举
【发布时间】:2014-08-28 09:29:16
【问题描述】:

我有:

@Column(name = "UserType", nullable = false)
@Enumerated(EnumType.STRING)
private UserType userType;

如何使用 addScalar() 方法通过 SQL 请求返​​回该字段?

【问题讨论】:

    标签: java hibernate jpa orm hibernate-mapping


    【解决方案1】:

    这就是将枚举添加到 SQLQuery 的方式

    1. 你定义一个属性对象

      Properties params = new Properties();
      params.put("enumClass", "UserType");
      params.put("type", "12"); /*EnumType.STRING type = 12 */
      
    2. 你解决了你的枚举类型:

      Type userEnumType = sessionFactory.getTypeHelper().custom(UserType.class, params);
      
    3. 你执行你的查询:

      List<SomeEntity> result = getSession().createSQLQuery("select e from SomeEntity ")
          .addScalar("userType", userEnumType)
          .setResultTransformer(Transformers.aliasToBean(SomeEntity.class))
          .list();
      

    【讨论】:

    • 我收到错误 org.hibernate.MappingException:无法实例化自定义类型:UserType。还有一些人放入了自定义方法 EnumType.class。然后我得到了同样的错误:org.hibernate.MappingException:无法实例化自定义类型:org.hibernate.type.EnumType.
    • UserType 也是一个 Hibernate 类。你确定你添加了一个名为 UserType 的类。
    • 其实我写UserType只是为了举例。但是我使用该类的全名,例如:com.xxx.User.UserType,当把它放到参数中时。
    • 当我从 User 类中移走 UserType 枚举时,我解决了这个问题。 UserType 必须有自己的 java 文件,然后一切都会好的。所以我使用下一个 enumClass 值:com.xxx.UserType。我还将 EnumType.class 放入自定义方法中。
    • 这适用于休眠 5 吗?我以前用于休眠,但现在相同的代码失败了?见stackoverflow.com/questions/38039481/…
    猜你喜欢
    • 2013-09-23
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多