Java hibernate HQL连接错误

Java hibernate HQL连接错误,java,hibernate,hql,Java,Hibernate,Hql,我试图让我的HQL查询工作,但我已经被困了一段时间,决定在这里问 我不断得到“期望加入的路径!” 所以我有两个表要查询,我已经有了SQL查询 这些是我的xml映射 Kamer.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hiber

我试图让我的HQL查询工作,但我已经被困了一段时间,决定在这里问

我不断得到“期望加入的路径!”

所以我有两个表要查询,我已经有了SQL查询

这些是我的xml映射

Kamer.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="model.Kamer" table="kamer">
    <id name="kamerid">
        <generator class="identity"/>
    </id>
    <property name="hotelid"/>
    <property name="kamertypeid" />
    <property name="status"      />
</class>
</hibernate-mapping>


Reservatie.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="model.Reservatie" table="reservatie">
    <id name="reservatieID">
        <generator class="identity"/>
    </id>
    <property name="klantID"/>
    <property name="kamertypeID" />
    <many-to-one name="kamerID" class="model.Kamer" />
    <property name="hotelID"      />
    <property name="verblijfsformuleID"  />
    <property name="verblijfsperiodeID"    />
    <property name="betalingsID" />
    <property name="gastID"     />
    <property name="kredietkaartID"/>
    <property name="start_datum"      />
    <property name="eind_datum"   />
    <property name="reservatie_datum"   />
    <property name="tijdige_annulatie"   />
    <property name="check_in_datum"   />
    <property name="check_uit_datum"   />
</class>
</hibernate-mapping>

这是我的HQL部分

import model.Reservatie;
import org.hibernate.Query; 
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import persistentie.HibernateUtil;
import model.Kamer;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;


@SuppressWarnings({"ALL"})
public class testKamer {
public static void main(String[] args) throws Exception{

    SessionFactory factory = HibernateUtil.getSessionFactory();
    Session session = factory.getCurrentSession();

    Transaction tx = session.beginTransaction();


    String HQL_QUERY = "SELECT k FROM Kamer k LEFT JOIN Reservatie r with k.kamerid = r.kamerID";
    Query query = session.createQuery(HQL_QUERY);
    List result = query.list();
    for(Iterator it = result.iterator();it.hasNext();) {
        Kamer kamer = (Kamer) it.next();
        System.out.println("Kamer: "+kamer.kamerid);
    }
}
}
这里还有原始的SQL查询

     SELECT *
     FROM kamer
     LEFT JOIN reservatie
     ON kamer.kamerid=reservatie.kamerid and kamer.kamertypeid = reservatie.kamertypeid and kamer.hotelid = reservatie.hotelid
     where not reservatie.verblijfsperiodeid = 2 or reservatie.kamerid is null;
欢迎任何帮助,
提前谢谢

我想你的问题应该是

String HQL_QUERY = "SELECT k FROM reservatie r right join Kamer k";


确切的问题是什么教授完全忘了提那件事,这里已经很晚了。我一直在得到“Path expected for join!”一个包含相关源的堆栈跟踪会很有帮助,我想问题不只是HQL。问题是您的实体之间没有任何关联。您存储其他实体的ID,而不是存储对它们的引用。阅读Hibernate关于关联的文档,并开始使用它们,因为只有关联才能进行连接?我对所有这些东西都相当陌生,所以我想通过在kamer.hbm.xml中添加多对一属性来建立关联?你认为你可以突出问题所在,以便我可以搜索更具体的内容吗?提前谢谢!遗憾的是,这不起作用,并给出了相同的错误,即:线程“main”org.hibernate.hql.ast.QuerySyntaxException中的异常:预期加入的路径![使用k.kamerid=r.kamerid从model.Kamer k LEFT JOIN reservatie r中选择k]
     SELECT *
     FROM kamer
     LEFT JOIN reservatie
     ON kamer.kamerid=reservatie.kamerid and kamer.kamertypeid = reservatie.kamertypeid and kamer.hotelid = reservatie.hotelid
     where not reservatie.verblijfsperiodeid = 2 or reservatie.kamerid is null;
String HQL_QUERY = "SELECT k FROM reservatie r right join Kamer k";
String HQL_QUERY = "SELECT k FROM reservatie r join Kamer k";