hibernate HQL加入错误

时间:2012-07-03 00:16:05

标签: java hibernate hql

我正在尝试让我的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;

欢迎任何帮助, 提前谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你的查询应该是

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

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