我有一个用复合主键(类ReportPK)标识的表格报告(类报告)
@Embeddable
public class ReportPK implements Serializable {
@Basic(optional = false)
@Column(name="num")
private int num;
@Basic(optional = false)
@Column(name="index")
private String index;
//Getters, setters, equals and hashCode methods
}
@Entity
public class Report {
@EmbeddedId
private ReportPK id;
//Other fields, getters .....
}
此处,使用数字和索引标识报告。
我想检索具有不同数字的报告,以便如果我在表格中有这些报告: (1,'A'),(1,'B'),(2,'A') 我会得到结果(1,'A')和(2,'A')(不是(1,'B'))。
我使用此代码,但它返回ReportPK列表而不是Report列表,而且它返回所有报告(例如没有使用不同的标准)
List <Report> results = getCurrentSession().createCriteria(Report.class)
.setProjection( Projections.projectionList()
.add( Projections.distinct(Projections.property("num")) )
).list();
如果有人遇到类似问题或对如何操作有所了解,我感谢他的帮助。
答案 0 :(得分:0)
嗯,您希望结果是实体,但是您正在使用投影。
如果你想破坏valeus,请使用:
getCurrentSession().createCriteria(Report.class)
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
如果你想引用实体的嵌入式id,你应该将id字段名称添加为前缀f.e:
Restrictions.gt("id.num", 10);