首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件API + Hibernate 4.2.4最终-获取@OneToOne属性不能双向工作

条件API + Hibernate 4.2.4最终-获取@OneToOne属性不能双向工作
EN

Stack Overflow用户
提问于 2013-11-04 13:22:05
回答 2查看 669关注 0票数 1

以下是两个相关实体的部分

实体Trademark

代码语言:javascript
复制
public class Trademark extends AbstractEntity {
    @OneToOne(mappedBy = "trademark", optional = false, cascade = CascadeType.MERGE)
    private ReferenceNumber referenceNumber;
(...)

}

实体ReferenceNumber

代码语言:javascript
复制
public class ReferenceNumber extends AbstractEntity {

    @OneToOne(optional = true)
    private Trademark trademark;
(...)
}

现在,让我们通过标准Api获取一些东西:

代码语言:javascript
复制
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。然而,这一次:

代码语言:javascript
复制
    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生成的"Real“sql实际上是根据标准加入的,因此实体映射器在这里没有做好他的工作--我猜:inner join referencenumber rn2_ on this_.id=rn2_.trademark_id -> referenceNumber.id=trademark.id whitch很好。冬眠虫?

EN

回答 2

Stack Overflow用户

发布于 2013-11-04 13:36:09

我记得最近有一个关于OneToOne映射的bug被修复了;您可能想尝试升级到最新的补丁版本(在编写本报告时是4.2.7 SP1 ),看看是否有什么改变。

票数 0
EN

Stack Overflow用户

发布于 2013-11-05 10:21:43

添加这一点,我将使用log4jdbc来查看Hibernate生成什么SQL查询;我打赌这是有区别的,比如做错了一个连接。例如,我通过设置错误的空属性触发Hibernate来产生错误的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19768615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档