java - 如何在NamedQuery中使用正确的HQL

标签 java sql hibernate hql

我对如何在 NamedQueries 中使用正确的 HQL 有疑问和问题,我阅读了很多文章,并在我的项目中做了一些测试,但我有一个问题,我不知道为什么我会遇到这个问题,对我来说一切正常,请查看堆栈跟踪:

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 类:

@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 类:

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);
    }
}

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 类:

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);
    }

}

谢谢!!

最佳答案

HQL 的语法已关闭。 : 位于参数之前,= 是静态查询的一部分。

更改:

SELECT pm FROM ProjectMediator pm WHERE pm.project.id := idProject

SELECT pm FROM ProjectMediator pm WHERE pm.project.id = :idProject

您的第二个 HQL 查询中也存在此问题。

 @NamedQuery (name="Project.findProjectWithStatus",
     query="SELECT p FROM Project p WHERE p.statusProject := statusProject")

更正表格

 @NamedQuery (name="Project.findProjectWithStatus",
    query="SELECT p FROM Project p WHERE p.statusProject = :statusProject")

关于java - 如何在NamedQuery中使用正确的HQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16809739/

相关文章:

java - 在双向链表的给定位置搜索节点

java - Eclipse Java EE IDE 不支持 javax.servlet 包

java - 在 spring security oauth 中,刷新 token 的默认持续时间是多少?

Java指定子类构造函数签名

MySQL 选择多个值并添加到一列

mysql - 按 "position"排序,但最后放置 0

java - Hibernate 错误 SQLGrammarException (MySQL)

java - JPA Postgres 查询ltree路径

c# - 使用 Dapper 将 byte[] 数组转换为 sqldbtype.Varbinary

hibernate - GAE 仅适用于 BigTable(或其他数据库)吗?