Java org.hibernate.QueryException:无法解析路径,意外令牌[尝试使用左联接]

Java org.hibernate.QueryException:无法解析路径,意外令牌[尝试使用左联接],java,hibernate,join,left-join,hql,Java,Hibernate,Join,Left Join,Hql,我创建了两个实体类: package entities; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "fr") public class FR { @Id @Column(name = "id") private S

我创建了两个实体类:

package entities;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "fr")
public class FR {
    @Id
    @Column(name = "id")
    private String id;
    @Column(name = "pid")
    private String pId;
    @Column(name = "pname")
    private String pName;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getpId() {
         return pId;
    }

    public void setpId(String pId) {
        this.pId = pId;
    }

    public String getpName() {
        return pName;
    }

    public void setpName(String pName) {
        this.pName = pName;
    }
}

package entities;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "ar")
public class AR {
    @Id
    @Column(name = "id")
    private String id;
    @Column(name = "value1")
    private String value1;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getValue1() {
        return value1;
    }

    public void setValue1(String value1) {
        this.value1 = value1;
    }
}
我正在尝试加入这些表以获取记录

Query qry=session.createQuery(“从FR.pId=AR.id上的FR左连接AR,其中FR.id=123或FR.pId=123”)

但是得到一个异常:

org.hibernate.QueryException:无法解析路径[FR.id],意外令牌[FR][from entities.FR]在FR.pId=AR.id上左加入AR,其中FR.id=123或FR.pId=123]

当我从查询中删除FR

Query qry=session.createQuery(“从FR.pId=AR.id上的FR左连接AR,其中id=123或pId=123”)

获取另一个异常:

org.hibernate.hql.internal.ast.QuerySyntaxException:应该是加入的路径![from entities.FR left join AR on FR.pId=AR.id,其中id=123或pId=123]

我正处于冬眠的学习阶段,不知道现在该做什么

如果您有关于左连接或其他连接的任何其他信息,请也分享

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/examples?zeroDateTimeBehavior=convertToNull</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">Root#123</property>
    <property name="hibernate.show_sql">true</property>
    <mapping class="entities.FR"/>
    <mapping class="entities.AR"/>
  </session-factory>
</hibernate-configuration>

由于在查询中使用的是ON子句,因此不能单独使用where子句。只需继续使用子句添加条件(以适用的为准)

这样做:
Query qry=session.createQuery(“从FR left join AR on FR.pId=AR.id和(FR.id=123或FR.pId=123)”并获取一个新异常:
org.hibernate.hql.internal.ast.QuerySyntaxException:预期加入的路径![from entities.FR left join AR on FR.pId=AR.id和(FR.id=123或FR.pId=123)]
package hibernate.joins;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;


public class HibernateJoins {
    public static void main(String[] args) {
        SessionFactory sessionFactory = getSessionFactory();
        Session session = sessionFactory.openSession();
        Query qry = session.createQuery("from FR left join AR on FR.pId = AR.id and ( FR.id=123 or FR.pId=123 )");
        List list = qry.list();
        list.forEach(System.out::println);
        session.close();
        sessionFactory.close();
    }

    public static SessionFactory getSessionFactory () {
        SessionFactory sessionFactory = new Configuration().configure("configurations/hibernate.cfg.xml").buildSessionFactory();
        return sessionFactory;
    }
}