gpt4 book ai didi

java - Criteria API + Hibernate 4.2.4 Final - 获取 @OneToOne 属性无法双向工作

转载 作者:行者123 更新时间:2023-12-01 04:12:41 24 4
gpt4 key购买 nike

这是两个相关实体的部分

实体商标

public class Trademark extends AbstractEntity {
@OneToOne(mappedBy = "trademark", optional = false, cascade = CascadeType.MERGE)
private 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 这很好。 hibernate 错误?

最佳答案

我记得读过最近修复了有关 OneToOne 映射的错误;您可能想尝试升级到最新的补丁版本(撰写本文时为 4.2.7 SP1),看看是否会发生任何变化。

关于java - Criteria API + Hibernate 4.2.4 Final - 获取 @OneToOne 属性无法双向工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19768615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com