【问题标题】:Hibernate aliasToBean does not convert string to EnumHibernate aliasToBean 不会将字符串转换为枚举
【发布时间】:2012-01-05 06:17:58
【问题描述】:

下面的查询是在列列表中选择一个常量,我希望 aliasToBean 将字符串转换为适当的枚举类型。

我已将具有枚举属性的其他实体映射为字符串,并且没有任何问题。

    @SuppressWarnings("unchecked")
    List<AssociatedEntity> fileList = queryUtil.createHQLQuery((
            "select '" + AssociatedEntityTypeEnum.ASSOCIATED_ENTITY_TYPE_FILE + "' as associatedEntityType," +
            " a.file2Id as id," +
            " f.name as name" +
            " from File f, Association a" +
            " where f.id = :fileId" +
            " and a.file1Id = f.id" +
            " and a.associationType = :associationType"
    ))
    .setParameter("fileId", fileId)
    .setParameter("associationType", AssociationTypeEnum.ASSOCIATION_TYPE_FILE_FILE)
    .setResultTransformer(Transformers.aliasToBean(AssociatedEntity.class))
    .list();

这是豆子:

public class AssociatedEntity {

public AssociatedEntity() {}

@Enumerated(EnumType.STRING)
private AssociatedEntityTypeEnum associatedEntityType;
public AssociatedEntityTypeEnum getAssociatedEntityType() { return this.associatedEntityType; }
public void setAssociatedEntityType(AssociatedEntityTypeEnum associatedEntityType) { this.associatedEntityType = associatedEntityType; }

private Integer id;
public Integer getId() { return this.id; }
public void setId(Integer id) { this.id = id; }

private String name;
public void setName(String name) { this.name = name; }
public String getName() { return this.name; }

}

以下是错误:

23.11.2011 17:05:25  INFO [http-8080-2] (QueryUtil:createHQLQuery) - select 'ASSOCIATED_ENTITY_TYPE_FILE' as associatedEntityType, a.file2Id as id, f.name as name from File f, Association a where f.id = :fileId and a.file1Id = f.id and a.associationType = :associationType
23.11.2011 17:05:25 ERROR [http-8080-2] (BasicPropertyAccessor$BasicSetter:set) - IllegalArgumentException in class: com.twoh.dto.AssociatedEntity, setter method of property: associatedEntityType
23.11.2011 17:05:25 ERROR [http-8080-2] (BasicPropertyAccessor$BasicSetter:set) - expected type: com.twoh.dto.enums.AssociatedEntityTypeEnum, actual value: java.lang.String

【问题讨论】:

    标签: hibernate enums hql


    【解决方案1】:

    这是我从一个 SO 答案中找到的解决方案

    Properties params = new Properties();
            params.put("enumClass", "models.IOStatusEnum");
            params.put("type", "12"); /*type 12 instructs to use the String representation of enum value*/
            Type myEnumType = new TypeLocatorImpl(new TypeResolver()).custom(EnumType.class, params);
            SQLQuery q = sess.createSQLQuery(queryString).addScalar("status", myEnumType);;
    

    【讨论】:

      【解决方案2】:

      查看如何创建枚举处理程序并在此处指定字段

      https://community.jboss.org/wiki/Java5StringValuedEnumUserType?_sscc=t

      【讨论】:

        猜你喜欢
        • 2010-10-03
        • 1970-01-01
        • 2014-03-18
        • 2015-06-10
        • 1970-01-01
        • 2012-08-25
        • 1970-01-01
        • 2016-07-30
        相关资源
        最近更新 更多