这是一个非常古老的问题,但对于为什么变压器中还没有这样的东西有点令人烦恼。
使用转换器运行查询:
Query sqlQuery = session.createSQLQuery(sqlStatement);
sqlQuery.setResultTransformer(AliasToEntityLinkedMapResultTransformer.INSTANCE);
List results = query.list();
对于转换器,我扩展了 BasicTransformerAdapter,而不是 AliasToEntityMapResultTransformer。
import org.hibernate.transform.BasicTransformerAdapter
public class AliasToEntityLinkedMapResultTransformer extends BasicTransformerAdapter implements Serializable {
public static final AliasToEntityLinkedMapResultTransformer INSTANCE = new AliasToEntityLinkedMapResultTransformer();
private AliasToEntityLinkedMapResultTransformer() {
}
public Object transformTuple(Object[] tuple, String[] aliases) {
Map result = new LinkedHashMap(tuple.length)
for (int i = 0; i < tuple.length; i++) {
String alias = aliases[i]
if (alias != null) {
result.put(alias, tuple[i])
}
}
return result;
}
private Object readResolve() {
return INSTANCE
}
public boolean equals(Object other) {
return other != null && AliasToEntityLinkedMapResultTransformer.class.isInstance(other)
}
public int hashCode() {
return getClass().getName().hashCode()
}
}
没有什么革命性的或直截了当的,但它确实存在。