2011-11-24 15 views
9

में कनवर्ट नहीं करता है मेरे पास नीचे दी गई क्वेरी है जो कॉलम सूची में निरंतर चयन कर रही है और मैं स्ट्रिंग को उचित enum प्रकार में बदलने के लिए उपनाम ToBean की अपेक्षा कर रहा था।हाइबरनेट aliasToBean स्ट्रिंग को Enum

मैंने स्ट्रिंग के रूप में enum गुणों के साथ अन्य इकाइयों को मैप किया है और कोई समस्या नहीं है।

@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(); 

यह सेम है:

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 

उत्तर

0

चेकआउट enum हैंडलर बना सकते हैं और यहां की तरह

https://community.jboss.org/wiki/Java5StringValuedEnumUserType?_sscc=t क्षेत्र पर निर्दिष्ट करने का तरीका:

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; } 

} 

और यहाँ त्रुटियाँ हैं

2

यहां एसओ उत्तर

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);; 
में से एक समाधान मिला है