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;
}
}