Java HQL联接路径应为联接

Java HQL联接路径应为联接,java,hibernate,left-join,hql,Java,Hibernate,Left Join,Hql,我有一个Java类应用程序 public class Application implements Serializable { private Long key; private String appName; private Long locationKey; private Long ownerKey; private Long unitKey; private Boolean active; //getters and sette

我有一个Java类应用程序

public class Application implements Serializable {
    private Long key;
    private String appName;
    private Long locationKey;
    private Long ownerKey;
    private Long unitKey;
    private Boolean active;

    //getters and setters
}
public class ApplicationDetails implements Serializable {
    private Long key;
    private String appName;
    private String location;
    private String ownerName;
    private String unitName;

    public ApplicationDetails(){
    }

    public ApplicationDetails(Long key, String appName, String location, String ownerName, String unitName){
        super();
        this.key=key;
        this.appName=appName;
        this.location=location;
        this.ownerName=ownerName;
        this.unitName=unitName;
    }

    //getters and setters
}
locationKey对应位置表,ownerKey代表人员表,unitKey代表单位表。我没有提到表之间的任何关系

我想检索应用程序列表,以及相应的位置、所有者和单元名称

我创建了一个新的Java类AplicationDetail.java

public class Application implements Serializable {
    private Long key;
    private String appName;
    private Long locationKey;
    private Long ownerKey;
    private Long unitKey;
    private Boolean active;

    //getters and setters
}
public class ApplicationDetails implements Serializable {
    private Long key;
    private String appName;
    private String location;
    private String ownerName;
    private String unitName;

    public ApplicationDetails(){
    }

    public ApplicationDetails(Long key, String appName, String location, String ownerName, String unitName){
        super();
        this.key=key;
        this.appName=appName;
        this.location=location;
        this.ownerName=ownerName;
        this.unitName=unitName;
    }

    //getters and setters
}
在dao中,我编写了以下查询

"select new com.myapp.domain.ApplicationDetail(application.key, application.appName, location.name as location, person.firstName || person.lastName as ownerName, unit.name as unitName)
from Application application, Location location, Person person, Unit unit 
where application.isCurrent = ? and application.locationKey = location.locationKey
and application.ownerKey = person.personKey and application.unitKey = unit.unitKey";
通过上面的查询,我得到了具有适当值的应用程序列表。但问题是它没有返回所有的应用程序行

有时,表中的locationKey、ownerKey或unitKey可以为null。或者,包含行的键可能不在相应的关联表中

在任何情况下,我都希望所有满足条件的应用程序返回true

因此,我编写了一个左外部联接查询

"select new com.myapp.domain.ApplicationDetail(application.key, application.appName, location.name as location, person.firstName || person.lastName as ownerName, unit.name as unitName)
from Application application
LEFT OUTER JOIN Location location WITH application.locationKey = location.locationKey
LEFT OUTER JOIN Person person WITH application.ownerKey = person.personKey
LEFT OUTER JOIN Unit unit WITH application.unitKey = unit.unitKey
where application.isCurrent = ?";
但当我跑步的时候,我会出现异常

03 Sep 2014 17:05:02 ERROR [tomcat-http--32] ErrorCounter.reportError(54) |  Path expected for join!
03 Sep 2014 17:05:02 ERROR [tomcat-http--32] ErrorCounter.reportError(50) |  Path expected for join!
 Path expected for join!
。 . . .

其他领域也同样如此。此外,它还表明没有构造函数

03 Sep 2014 17:05:02 ERROR [tomcat-http--32] ErrorCounter.reportError(54) |  Unable to locate appropriate constructor on class [com.myapp.domain.ApplicationDetail]
[cause=org.hibernate.PropertyNotFoundException: no appropriate constructor in class: com.myapp.domain.ApplicationDetail]
03 Sep 2014 17:05:02 ERROR [tomcat-http--32] ErrorCounter.reportError(50) |  Unable to locate appropriate constructor on class [com.myapp.domain.ApplicationDetail]
[cause=org.hibernate.PropertyNotFoundException: no appropriate constructor in class: com.myapp.domain.ApplicationDetail]
 Unable to locate appropriate constructor on class [com.myapp.domain.ApplicationDetail]
[cause=org.hibernate.PropertyNotFoundException: no appropriate constructor in class: com.myapp.domain.ApplicationDetail]
但是我的ApplicationDetails.java中有带参数的构造函数


对于
ApplicationDetails
,您是否也有默认构造函数?是的,我也有默认构造函数。我必须在某些类中创建对象请将
ApplicationDetails
类中的所有构造函数添加到您的问题中。@Chaitanya请检查您是否说您没有映射域对象之间的任何关联?还是你只是把它们从你的问题中漏掉了?