Java 标准API+Hibernate 4.2.4最终-获取@OneTONE属性不起作用

Java 标准API+Hibernate 4.2.4最终-获取@OneTONE属性不起作用,java,hibernate,criteria-api,Java,Hibernate,Criteria Api,以下是两个相关实体的部分 实体商标 实体引用编号 现在,让我们通过Criteria Api获取一些东西: protected Criteria createCriteria(SharedSessionContract session) { Criteria criteria = session.createCriteria(Trademark.class); criteria.createAlias("service", "s"); criteria.createAlia

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

实体商标

实体引用编号

现在,让我们通过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-空。然而,这一点:

    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实际上是按条件连接的,所以实体映射程序在这里没有完成他的工作,我猜:在这个上的内部连接referencenumber rn2\u.id=rn2\u.trademark\u id->referencenumber.id=trademark.id,这很好。Hibernate bug?

我记得读过一篇文章,最近修复了一个关于OneTONE映射的bug;在撰写本文时,您可能希望尝试升级到最新的补丁版本4.2.7 SP1,以查看是否有任何变化。

添加这一点,我将使用log4jdbc进行调查,以查看Hibernate生成了什么SQL查询;我打赌这是有区别的,就像一个连接被做错了。例如,我已通过设置错误的nullability属性触发Hibernate生成错误的结果。

No,仍然无法获取4.2.7.SP1上的属性。您是否能够获得有关此类hibernate问题的链接?只需查看您可以通过hibernate.org网站找到的发行说明。但至少现在你排除了它和那个bug有任何关系。除了给你的ReferenceNumber实体添加一个合适的@JoinColumn注释之外,我已经没有主意了。@JoinColumnname=trademark\u id->trademark.getReferenceNumber==Null你看到我的编辑了吗?SQL(至少在hibernate级别上)看起来不错,所提到的实体之间的内部连接是应该的。
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;
    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;
}