这是两个相关实体的一部分
实体Trademark
public class Trademark extends AbstractEntity {
@OneToOne(mappedBy = "trademark", optional = false, cascade = CascadeType.MERGE)
private ReferenceNumber referenceNumber;
(...)
}
实体ReferenceNumber
public class ReferenceNumber extends AbstractEntity {
@OneToOne(optional = true)
private Trademark trademark;
(...)
}
现在,让我们通过 Criteria Api 获取一些东西:
protected Criteria createCriteria(SharedSessionContract session) {
Criteria criteria = session.createCriteria(Trademark.class);
criteria.createAlias("service", "s");
criteria.createAlias("referenceNumber", "rn", JoinType.INNER_JOIN);
criteria.add(Restrictions.eq("deleted", false));
criteria.add(Restrictions.in("service", createServiceList(getConfig().getServices())));
criteria.setMaxResults(1);
return criteria;
referenceNumber
未获取属性- 每个实体都为 null。然而这个:
protected Criteria createCriteria(SharedSessionContract session) {
Criteria criteria = session.createCriteria(ReferenceNumber.class);
criteria.createAlias("service", "s");
criteria.createAlias("trademark", "t", JoinType.INNER_JOIN);
criteria.add(Restrictions.eq("t.deleted", false));
criteria.add(Restrictions.in("t.service", createServiceList(getConfig().getServices())));
criteria.setMaxResults(1);
return criteria;
}
工作得很好。它返回确切数量的结果(是的,我在获取之前计算它们)但是这里的关系被获取得很好。怎么来的?如何使 H 获取第二个示例中的属性。
编辑:
H 生成的“真实” sql 实际上是按标准加入的,所以我猜实体映射器在这里没有做他的工作:inner join referencenumber rn2_ on this_.id=rn2_.trademark_id
-> referenceNumber.id=trademark.id
whitch 很好。休眠错误?