不,這不是完全可能的。 Criteria查詢只能返回由標量構建的實體,標量數組或值對象(使用ResultTransformer
)。
您可以返回一個HumanWithSalutation
對象列表,它將與Human +附加稱呼對象保持相同的字段,但這些對象將是值對象,而不是持久對象:不會對這些對象進行任何修改對數據庫持久保存,就像人類實例一樣。
要做到這一點,創建類:
public class HumanWithSalutation extends Human {
private String salutation;
// getter and setter
}
分配一個AliasToBeanResultTransformer
(這將填充使用制定者所有HumanWithSalutation
對象),並確保標準有一個投影列表返回人類的所有領域+稱呼(化名爲「稱呼」):
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.property("id");
projectionList.add(Projections.property("name");
projectionList.add(Projections.property("gender");
projectionList.add(Projections.alias(Projections.sqlProjection(...), "salutation"));
criteria.setProjection(projectionList);
如果您不希望SQL投影,你可以實現在getSalutation()
方法的Java改造(和刪除的setter)。
這可能與Hibernate ['SQLQuery'](http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/SQLQuery.html) - 尋找'addEntity()'和'addScalar ()'。 – xmedeko