[英]How to use a correct HQL in NamedQuery
I have a doubt and problem how to use a correct HQL in NamedQueries, I read many articles and I make some test in my project, but I have a problem, I don't know why I have this problem, for me its all ok, see the stacktrace: 我有一个疑问和问题,如何在NamedQueries中使用正确的HQL,我阅读了许多文章,并在项目中进行了一些测试,但是我有一个问题,我不知道为什么会有这个问题,对我来说一切正常,请参阅stacktrace:
SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/EMS2App] threw exception [java.lang.ExceptionInInitializerError] with root cause
org.hibernate.HibernateException: Errors in named queries: ProjectMediator.findProjectByIdProjectMediator, Project.findProjectWithStatus
ProjectMediator class: ProjectMediator类:
@Entity
@NamedQueries({
@NamedQuery(name = "ProjectMediator.findProjectByIdProjectMediator",
query = "SELECT pm FROM ProjectMediator pm WHERE pm.project.id := idProject")
})
public class ProjectMediator implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
public static final String FIND_PROJECT_BY_ID_PROJECTMEDIATOR = "ProjectMediator.findProjectByIdProjectMediator";
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@OneToOne
@JoinColumn(name="id_project")
private Project project;
ProjectMediatorDAO class: ProjectMediatorDAO类:
public class ProjectMediatorDAO extends GenericDAO<ProjectMediator>{
private static final long serialVersionUID = 1L;
public ProjectMediatorDAO () {
super(ProjectMediator.class);
}
public ProjectMediator findProjectByIdProjectMediator (int idProject) {
Map<String,Object> parameters = new HashMap<String,Object>();
parameters.put("idProject",idProject);
return super.findOneResult(ProjectMediator.FIND_PROJECT_BY_ID_PROJECTMEDIATOR, parameters);
}
}
Is the same problem for the Project class: Project类是否存在相同的问题:
@Entity
@NamedQueries ({
@NamedQuery (name="Project.findProjectWithStatus",query="SELECT p FROM Project p WHERE p.statusProject := statusProject"),
})
public class Project implements Serializable {
private static final long serialVersionUID = 1L;
public static final String FIND_PROJECT_WITH_STATUS = "Project.findProjectWithStatus";
//Attributes
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name="STATUS_PROJECT",columnDefinition="BIT", length=1)
private Boolean statusProject;
//gets and sets
}
ProjectDAO class: ProjectDAO类:
public class ProjectDAO extends GenericDAO<Project> {
private static final long serialVersionUID = 1L;
public ProjectDAO() {
super(Project.class);
}
public List<Project> findProjectWithStatus(Boolean statusProject) {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("statusProject", statusProject);
return super.findManyResult(Project.FIND_PROJECT_WITH_STATUS,parameters);
}
}
Thank you!! 谢谢!!
The syntax of the HQL is off. HQL的语法关闭。 The
:
comes before the parameter and the =
is part of the static query. :
放在参数之前,而=
是静态查询的一部分。
Change: 更改:
SELECT pm FROM ProjectMediator pm WHERE pm.project.id := idProject
to 至
SELECT pm FROM ProjectMediator pm WHERE pm.project.id = :idProject
This issue also exists in your second HQL query. 您的第二个HQL查询中也存在此问题。
@NamedQuery (name="Project.findProjectWithStatus",
query="SELECT p FROM Project p WHERE p.statusProject := statusProject")
Corrected Form 更正表格
@NamedQuery (name="Project.findProjectWithStatus",
query="SELECT p FROM Project p WHERE p.statusProject = :statusProject")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.