我正在尝试让我的 HQL 查询正常工作,但我已经被困了一段时间,并决定在这里提问。
我不断收到“预期加入的路径!”
所以我有 2 个要查询的表,我已经有了 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>
这些是我的 2 个 java 类
package model;
public class Kamer {
public int kamerid;
public int hotelid;
public int kamertypeid;
public String status;
public Kamer() {
}
public Kamer(int kamerid, int hotelid, int kamertypeid, String status) {
this.kamerid = kamerid;
this.hotelid = hotelid;
this.kamertypeid = kamertypeid;
this.status = status;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public int getKamerid() {
return kamerid;
}
public void setKamerid(int kamerid) {
this.kamerid = kamerid;
}
public int getHotelid() {
return hotelid;
}
public void setHotelid(int hotelid) {
this.hotelid = hotelid;
}
public int getKamertypeid() {
return kamertypeid;
}
public void setKamertypeid(int kamertypeid) {
this.kamertypeid = kamertypeid;
}
@Override
public String toString() {
return "Kamer{" +
"kamerid=" + kamerid +
", hotelid=" + hotelid +
", kamertypeid=" + kamertypeid +
", status='" + status + '\'' +
'}';
}
}
和
package model;
import java.util.Date;
public class Reservatie {
public int reservatieID;
public int klantID;
public int kamertypeID;
public int kamerID;
public int hotelID;
public int verblijfsformuleID;
public int verblijfsperiodeID;
public int betalingsID;
public int gastID;
public int kredietkaartID;
public Date start_datum;
public Date eind_datum;
public Date reservatie_datum;
public String tijdige_annulatie;
public Date check_in_datum;
public Date check_uit_datum;
public Reservatie() { }
public Reservatie(int reservatieID,int klantID, int kamertypeID, int kamerID, int hotelID, int verblijfsformuleID, int verblijfsperiodeID, int betalingsID, int gastID, int kredietkaartID, Date start_datum, Date eind_datum, Date reservatie_datum, String tijdige_annulatie, Date check_in_datum, Date check_uit_datum) {
this.reservatieID = reservatieID;
this.klantID = klantID;
this.kamertypeID = kamertypeID;
this.kamerID = kamerID;
this.hotelID = hotelID;
this.verblijfsformuleID = verblijfsformuleID;
this.verblijfsperiodeID = verblijfsperiodeID;
this.betalingsID = betalingsID;
this.gastID = gastID;
this.kredietkaartID = kredietkaartID;
this.start_datum = start_datum;
this.eind_datum = eind_datum;
this.reservatie_datum = reservatie_datum;
this.tijdige_annulatie = tijdige_annulatie;
this.check_in_datum = check_in_datum;
this.check_uit_datum = check_uit_datum;
}
public int getKlantID() {
return klantID;
}
public void setKlantID(int klantID) {
this.klantID = klantID;
}
public int getReservatieID() {
return reservatieID;
}
public void setReservatieID(int reservatieID) {
this.reservatieID = reservatieID;
}
public int getKamertypeID() {
return kamertypeID;
}
public void setKamertypeID(int kamertypeID) {
this.kamertypeID = kamertypeID;
}
public int getKamerID() {
return kamerID;
}
public void setKamerID(int kamerID) {
this.kamerID = kamerID;
}
public int getHotelID() {
return hotelID;
}
public void setHotelID(int hotelID) {
this.hotelID = hotelID;
}
public int getVerblijfsformuleID() {
return verblijfsformuleID;
}
public void setVerblijfsformuleID(int verblijfsformuleID) {
this.verblijfsformuleID = verblijfsformuleID;
}
public int getVerblijfsperiodeID() {
return verblijfsperiodeID;
}
public void setVerblijfsperiodeID(int verblijfsperiodeID) {
this.verblijfsperiodeID = verblijfsperiodeID;
}
public int getBetalingsID() {
return betalingsID;
}
public void setBetalingsID(int betalingsID) {
this.betalingsID = betalingsID;
}
public int getGastID() {
return gastID;
}
public void setGastID(int gastID) {
this.gastID = gastID;
}
public int getKredietkaartID() {
return kredietkaartID;
}
public void setKredietkaartID(int kredietkaartID) {
this.kredietkaartID = kredietkaartID;
}
public Date getStart_datum() {
return start_datum;
}
public void setStart_datum(Date start_datum) {
this.start_datum = start_datum;
}
public Date getEind_datum() {
return eind_datum;
}
public void setEind_datum(Date eind_datum) {
this.eind_datum = eind_datum;
}
public Date getReservatie_datum() {
return reservatie_datum;
}
public void setReservatie_datum(Date reservatie_datum) {
this.reservatie_datum = reservatie_datum;
}
public String getTijdige_annulatie() {
return tijdige_annulatie;
}
public void setTijdige_annulatie(String tijdige_annulatie) {
this.tijdige_annulatie = tijdige_annulatie;
}
public Date getCheck_in_datum() {
return check_in_datum;
}
public void setCheck_in_datum(Date check_in_datum) {
this.check_in_datum = check_in_datum;
}
public Date getCheck_uit_datum() {
return check_uit_datum;
}
public void setCheck_uit_datum(Date check_uit_datum) {
this.check_uit_datum = check_uit_datum;
}
@Override
public String toString() {
return "Reservatie{" +
"reservatieID=" + reservatieID +
", klantID=" + klantID +
", kamertypeID=" + kamertypeID +
", kamerID=" + kamerID +
", hotelID=" + hotelID +
", verblijfsformuleID=" + verblijfsformuleID +
", verblijfsperiodeID=" + verblijfsperiodeID +
", betalingsID=" + betalingsID +
", gastID=" + gastID +
", kredietkaartID=" + kredietkaartID +
", start_datum=" + start_datum +
", eind_datum=" + eind_datum +
", reservatie_datum=" + reservatie_datum +
", tijdige_annulatie='" + tijdige_annulatie + '\'' +
", check_in_datum=" + check_in_datum +
", check_uit_datum=" + check_uit_datum +
'}';
}
}
这是我的 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;
欢迎任何帮助,在此先感谢!