我正在尝试使用自定义投影,同时通过 Hibernate Criteria API 获取映射实体的对象。
课程:
@Entity
public class Table1 {
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name = "Table2")
@MapKey(name = "key")
@Cascade({CascadeType.PERSIST, CascadeType.MERGE})
private Set<Table3> table3Entities;
@Column(name = "nvalue")
private String nval;
@Column(name = "nvalue2")
private String nval2;
...
}
@Entity
public class Table3 {
@Column(name = "tkey")
private String key;
@Column(name = "tvalue")
private String value;
}
这里我只需要获取 nval 和 table3Entities 元素的所有字段。所以我在 DAO 类中尝试了这个:
criteria = createCriteria();
criteria.createAlias("table3Entities","table3Entities"); // Assuming creating an alias would automatically add all fields of table3Entities to the projections
return criteria.setProjection(/* Add projection for nval property */).setResultTransformer(Transformers.aliasToBean(Table1.class)).list();
但是,这不会在返回的列表元素中返回任何 table3Entities 属性。
当我单独添加 table3Entities 的所有属性时,它部分工作正常 - 至少获取了必需的字段,但结果转换失败。
// Working
criteria = createCriteria();
criteria.createAlias("table3Entities","table3Entities").setProjection(/* Add projection for all table3Entities properties one by one */);
return criteria.setProjection(/* Add projection for nval property */).setResultTransformer(Transformers.aliasToBean(Table1.class)).list();
问题: