Java HQL联接路径应为联接
我有一个Java类应用程序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
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请检查您是否说您没有映射域对象之间的任何关联?还是你只是把它们从你的问题中漏掉了?