2
我有DTO的下一个结构对象:休眠标准assotiated对象
public class MainDTO implements Serializable {
private Long mainId;
private String name;
... //some other fields
private boolean disabled;
@ManyToOne()
@JoinColumn(name = "root_id")
private RootDTO root;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "child_id", updatable = false, referencedColumnName = "child_id")
@Cascade(value = { CascadeType.ALL, CascadeType.DELETE_ORPHAN })
private ChildDTO child;
...
}
public class RootDTO implements Serializable {
... //some other fields
private boolean disabled;
...
}
public class ChildDTO implements Serializable {
private Long childId;
... //some other fields
private boolean disabled;
@ManyToOne()
@JoinColumn(name = "info_id")
private InfoDTO info;
...
}
public class InfoDTO implements Serializable {
private Long infoId;
... //some other fields
private boolean disabled;
...
}
我需要填写Map<String, Map<Long, Long>>
(<name from MainDTO, <mainId from MainDTO, infoId from InfoDTO >>
)与下一个限制:
MainDTO.disabled =假,
MainDTO.root!= null,
MainDTO.root.disabled = false,
MainDTO.child.disabled =假,
MainDTO.child.info!= NULL,
MainDTO.child.info.disabled =假
这里是我写的代码,但从InfoDTO中选择infoId:
Criteria rootCriteria = getSession().createCriteria(
MainDTO.class);
// check that root is enabled
rootCriteria.createCriteria("root", "root").add(
Restrictions.eq("disabled", false));
// check that child is enabled
Criteria childCriteria = rootCriteria
.createCriteria("child", "child")
.add(Restrictions.eq("disabled", false))
.add(Restrictions.isNotNull("info"));
// check that info is enabled
childCriteria
.createCriteria("info", "info")
.add(Restrictions.eq("disabled", false));
ProjectionList rootProjection = Projections.projectionList()
.add(Projections.property("mainId"))
.add(Projections.property("name"))
.add(Projections.property("child.info")); //HOW TO SELECT ONLY ID??
rootCriteria.setProjection(rootProjection);
rootCriteria.add(Restrictions.eq("disabled", false))
.add(Restrictions.isNotNull("root"))
.add(Restrictions.isNotNull("child"));
非常感谢!
非常感谢!也许你可以帮我解决另一个问题:当我期望Object [3]将它转换为我的Map时,这个rootCriteria.list()返回下一个结构:Object [Object [3]]。也许我应该添加一些组声明? – ninja
criteria.list()方法返回一个列表。列表中的每个元素都是由查询返回的行,用对象数组表示。每行有三列。 criteria.list()方法应该返回一个List
现在它返回列表