我怎样才能正确使用hql join

时间:2014-04-19 13:30:13

标签: hibernate

更好地解释问题

Colaborateur类的代码

private Integer idColaborateur;
        private Rolecol rolecol;
        private String matriculeColaborateur;
        private String nomColaborateur;
        private String prenomColaborateur;
        private String mailColaborateur;
        private String pwdColaboratuer;
        private String loginColaborateur;
        private String adresseColaborateur;
        private Boolean flgSuspendu;
  // getter and setter

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "colaborateur")
        public Set<NoteObjectifs> getNoteObjectifses() {
            return this.noteObjectifses;
        }

类的代码NoteObjectifs

private Integer idNoteObjectif;
        private Colaborateur colaborateur;
        private CompagneDevaluation compagneDevaluation;
        private Appreciation appreciation;
        private Integer moyenneFinale;
        private String objectif;
        private Integer poid;

// getter and setter

    @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "idColaborateur")
        public Colaborateur getColaborateur() {
            return this.colaborateur;
        }

NoteObjectifsDAO

public List<NoteObjectifs> findByMatriculecol(String matriculecolaborateur){
        String queryString = "String queryString = "select c from NoteObjectifs n  inner join n.colaborateur c  where c.matriculeColaborateur = ? ";
        return getHibernateTemplate().find(queryString);
    }

异常

Expected positional parameter count: 1, actual parameters: [] [select c from NoteObjectifs n  inner join n.colaborateur c  where c.matriculeColaborateur = ? ]

我遇到HQL查询问题 我想通过他们的matricule查看员工(colaborateur)的目标(noteobjectif)

1 个答案:

答案 0 :(得分:1)

此处的例外与连接无关...您没有声明参数,您必须这样做。修复是这样的:

return getHibernateTemplate().find(queryString, matriculecolaborateur);

如果我可以建议另外一件事:为这种“静态”查询创建一个命名查询。 NamedQueries在启动时编译,而不是在运行时编译,因此更快。你可以在一个地方声明它们(在类顶部的注释中,或在xml中)。

祝你好运。