Java hibernate HQL连接错误
我试图让我的HQL查询工作,但我已经被困了一段时间,决定在这里问 我不断得到“期望加入的路径!” 所以我有两个表要查询,我已经有了SQL查询 这些是我的xml映射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
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";