如何使用Hibernate的addScalar()方法返回一个枚举类型

8

我有:

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

如何使用addScalar()方法通过SQL请求返回这个字段?
1个回答

10

这是如何将枚举类型添加到SQLQuery的方法:

  1. 定义一个属性对象

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

    Type userEnumType = sessionFactory.getTypeHelper().custom(UserType.class, params);
    
  4. 您执行了查询:

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

1
UserType 也是一个 Hibernate 类。您确定已经添加了名为 UserType 的类吗? - Vlad Mihalcea
我解决了这个问题,当我将UserType枚举从User类中移除时。UserType必须有它自己的Java文件,然后一切都会好起来。所以我使用了下一个enumClass值:com.xxx.UserType。并且我还将EnumType.class放入了自定义方法中。 - Dark Hydra
这个能和 Hibernate 5 一起工作吗?我之前用过它来处理 Hibernate,但现在同样的代码却出错了。请参考 http://stackoverflow.com/questions/38039481/enum-property-fails-in-sql-transformation-for-hibernate-5。 - bavon
这对于非枚举类型也适用,尽管我不需要Properties参数。谢谢! - Eric
每个人在网络上都只是不停地复制粘贴“/*EnumType.STRING type = 12 */”,但这背后的含义是什么呢? - no id
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接