当前位置: 首页 > 知识库问答 >
问题:

Hiberante内部联接给出了“联接所需的路径”异常

郑和泰
2023-03-14

我有以下实体,

    @Entity
    @Table(name = "person")
    public class Person implements Serializable {

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")
        private Long id;

        // Other fields 
    }

     @Entity
        @Table(name = "agreement")
        public class Agreement implements Serializable {

            private static final long serialVersionUID = 15L;

            @Id
            @GeneratedValue(strategy = GenerationType.IDENTITY)
            @Column(name = "id")
            private Long id;

            @ManyToOne
            @JoinColumn(name = "person_id", nullable = false)
            private Person person;

            @ManyToOne
            @JoinColumn(name = "company_id", nullable = false)
            private Company company;

        }

    @Entity
    @Table(name = "company")
    public class Company implements Serializable {

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")
        private Long id;

        @Column(name = "name", length = 100)
        private String name;
    }

我需要获得所有与公司签订公司ID 45协议的人员。下面是我编写的用于获取详细信息的本机查询。

SELECT distinct p.* ROM person p INNER JOIN agreement a ON a.person_id = p.id where a.company_id = 45;

但我被告知将其转换为JPA实体查询。我想出了以下内容,

SELECT distinct p  FROM Person p INNER JOIN Agreement a WHERE a.person = p AND a.company.id = 45;

但这给了我以下例外,

原因:org.hibernate.hql.internal.ast。QuerySyntaxException:连接路径应为![在org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74)的org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:91)的org.hibernates.hql.内部连接协议a中选择不同的p,其中a.Person=p和a.company.id=45]org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslaterImpl.java:190)位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QuerytranslaterImpL.java:142),位于org.hibernate.engine.query.spi.HQLQueryPlan.(hqlQuery.java:115)位于org.hibernate.engine.QLQueryPlan(QueryPlanCache.java:150)在org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:302),在org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractionSessionImpL.java:240)在org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbtractEntityManager.java:305)

有人可以帮助我解决我在查询中做错了什么吗?

共有1个答案

郭永安
2023-03-14

JPA在HQL语句中使用路径,从一个实体到另一个实体相关联,并且由于它没有找到任何路径,因此它正在抱怨。您可以尝试以下查询。

SELECT distinct p FROM Agreement a JOIN a.person p WHERE a.company.id = 45;
 类似资料:
  • 如何在Hibernate中编写此SQL查询?我想使用Hibernate创建查询,而不是创建数据库。 我在SQLServer2008中创建了实体类, 我尝试用多种方法构建工作选择查询,但仍然不起作用。 也许实体有问题?

  • 问题内容: 例如,我在表中有此数据, 我或该表本身如何,这样我可以在下面获得此结果? 尽我所能,我只想用关键字“ manage”查询行,但我希望 add 的行中的列数据与结果中的 manage 行中的as相同。 是否有可能? 编辑: 我实际表格的简化版本- , 我的实际查询已经很乱了… 结果我目前得到了 但是我在这之后 问题答案: 您只需要两次引用该表: 如果要在列表中查看根,请用左联接替换inn

  • 问题内容: 我想使用我的数据库通过电子邮件与我的用户联系。我想确保我不会不小心联系同一位用户两次。为此,我有一张表来跟踪与谁联系以及何时联系。 当我执行MYSQL查询时,我想从表中选择电子邮件,并确保表中不存在这些条目。 要在句子中添加短语:如果电子邮件不在Contacted_Table中,请从Email_Table中选择电子邮件 也许有一种完全不同的方法。我愿意接受所有建议:)谢谢:) 问题答案

  • 问题内容: 我有以下代码: 当我加入ou时,我得到2个相同单位的ID。这使内部联接tblOrderServiceUnits返回4行,其中2行重复。我需要它只返回不同的2行。如何仅使用不重复到内部联接的不重复ou.id? 不好意思的解释很抱歉,但是基本上我是想看看带有不同子查询的INNER JOIN如何工作,如果有人可以给我一个例子,我可以从那里弄清楚。 问题答案: 例如:

  • 我试图在一列内连接两个表。从数据库方面来看,没有映射,因为这是我不想讨论的事情。 我想使用内部联接执行HQL查询并检索角色对象/结果。 这是到目前为止我的hql 一场createQuery(“从角色作为角色内部加入参与作为角色上的参与。id=invention.roleid,其中invention.id=X”)。list(); 我看到在HQL上不可用。如何明确地告诉Hibernate仅加入此列。

  • 问题内容: 如何在Hibernate中编写此SQL查询?我想使用Hibernate创建查询,而不是创建数据库。 我在SQLServer2008中创建了实体类, 我试图以多种方式构建有效的选择查询,但仍然无法正常工作。 实体有问题吗? 问题答案: 连接只能在实体之间存在关联时使用。您的Employee实体不应将名称为,类型为的字段映射到列。它应该与Team实体具有ManyToOne关联,并映射为Jo