我有一个USER对象,它有许多字段与PERMISSION对象具有一对多映射。
我也想只获取具有一组权限的用户的少数字段。我的代码是
public class USER {
private Integer id;
private String username;
...
...
...
private Set<Permission> permissions = new HashSet<Permission>();
//setter - getter methods
}
权限.java
public class Permission {
private String name;
private Integer id;
//setter - getter methods
}
投影代码:
Criteria criteria = session.createCriteria(User.class);
criteria.setCacheable(true);
criteria.add(eq("username", username).ignoreCase());
criteria.createAlias("permissions ", "perm", LEFT_OUTER_JOIN);
ProjectionList projectedFields = Projections.projectionList();
projectedFields.add(Projections.property("id").as("id"));
projectedFields.add(Projections.property("perm.id").as("permissions.id"));
criteria.setProjection(projectedFields);
criteria.setResultTransformer(new AliasToBeanNestedResultTransformer((User.class)));
User user = (User) criteria.uniqueResult();
我收到以下异常:
org.hibernate.PropertyNotFoundException: Could not find setter for id on interface java.util.Set
at org.hibernate.property.ChainedPropertyAccessor.getSetter(ChainedPropertyAccessor.java:66)
at org.hibernate.transform.AliasToBeanResultTransformer.initialize(AliasToBeanResultTransformer.java:121)
at org.hibernate.transform.AliasToBeanResultTransformer.transformTuple(AliasToBeanResultTransformer.java:84)
at ae.gov.adm.saeed.util.AliasToBeanNestedResultTransformer.transformTuple(AliasToBeanNestedResultTransformer.java:80)
at org.hibernate.transform.CacheableResultTransformer.retransformResults(CacheableResultTransformer.java:230)
任何想法,如何解决这个问题?