Java 为什么获得与JPQL查询相关的HibernateException(命名查询中的错误)?

Java 为什么获得与JPQL查询相关的HibernateException(命名查询中的错误)?,java,sql,hibernate,jakarta-ee,jpql,Java,Sql,Hibernate,Jakarta Ee,Jpql,我对Hibernate非常陌生,在将JPQL查询定义到应用程序中时遇到以下问题 因此,我有以下情况: 1) 我有一个模型KMCountryArea类,它被注释为将其映射到DB表,并定义了一个查询 @NamedQueries({ @NamedQuery(name = "kmCountryListByName", query = "SELECT country FROM KMCountryArea country WHERE country.nomeFolder = :nomeFo

我对Hibernate非常陌生,在将JPQL查询定义到应用程序中时遇到以下问题

因此,我有以下情况:

1) 我有一个模型KMCountryArea类,它被注释为将其映射到DB表,并定义了一个查询

@NamedQueries({
        @NamedQuery(name = "kmCountryListByName", query = "SELECT country FROM KMCountryArea country WHERE country.nomeFolder  = :nomeFolder order by country.idCountry")
})

@Entity
@Table(name = "KM_COUNTRY_AREA")
public class KMCountryArea implements Serializable {

    @Id
    @GeneratedValue
    private Long idCountryArea;

    @Column(name = "nomeFolder")
    private String nomeFolder;

    //@Column(name = "country")
    //@OneToOne(mappedBy = "country", cascade = CascadeType.ALL)
    @OneToOne
    private KMCountry country;

    public Long getIdCountryArea() {
        return idCountryArea;
    }

    public void setIdCountryArea(Long idCountryArea) {
        this.idCountryArea = idCountryArea;
    }

    public String getNomeFolder() {
        return nomeFolder;
    }

    public void setNomeFolder(String nomeFolder) {
        this.nomeFolder = nomeFolder;
    }

    public KMCountry getCountry() {
        return country;
    }

    public void setCountry(KMCountry country) {
        this.country = country;
    }
}
正如您在前面的代码片段中所看到的,我定义了一个名为kmCountryListByNameJPQL查询,这个:

@NamedQueries({
        @NamedQuery(name = "kmCountryListByName", query = "SELECT country FROM KMCountryArea country WHERE country.nomeFolder  = :nomeFolder order by country.idCountry")
})
public interface KMCountryAreaService {

    @Transactional
    public List<KMCountry> getCountryListByName(Long idCountry);

}
2) 然后我有一个DAO定义了一个名为KMCountryAreaService的接口,这个接口:

@NamedQueries({
        @NamedQuery(name = "kmCountryListByName", query = "SELECT country FROM KMCountryArea country WHERE country.nomeFolder  = :nomeFolder order by country.idCountry")
})
public interface KMCountryAreaService {

    @Transactional
    public List<KMCountry> getCountryListByName(Long idCountry);

}
公共接口服务{
@交易的
公共列表getCountryListByName(长idCountry);
}
KMCountryAreaServiceImpl具体类实现:

@Repository("kmCountryAreaService")
public class KMCountryAreaServiceImpl extends AbstractService implements KMCountryAreaService {

    public List<KMCountry> getCountryListByName(Long idCountry){
        List<KMCountry> list = getHibernateTemplate().findByNamedQuery("kmCountryListByName");
        return list;
    }

}
@Repository(“kmCountryAreaService”)
公共类KMCountryAreaServiceImpl扩展了抽象服务,实现了KMCountryAreaService{
公共列表getCountryListByName(长idCountry){
List List=getHibernateTemplate().findByNamedQuery(“kmCountryListByName”);
退货清单;
}
}
因此,如您所见,getCountryListByName()方法获取我在模型类(KMCountryArea中定义的kmCountryListByName

问题是,当我尝试启动我的应用程序(它是LifeRay门户,但我认为它并不重要)时,我在stacktrace中获得以下错误消息:

 <Stack trace for message 149004
weblogic.application.ModuleException: :org.hibernate.HibernateException:Errors in named queries: kmCountryListByName
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:365)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1300)
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:860)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:779)
    Truncated. see log file for complete stacktrace
> 

我的JPQL查询(名为kmCountryListByName的查询定义在模型类中)或KMCountryAreaServiceImpl服务实现中似乎有一些错误


为什么??我错过了什么?如何解决此问题?

尝试以下方法:

@NamedQueries({
    @NamedQuery(name = "kmCountryListByName", query = "SELECT c FROM KMCountryArea c WHERE c.nomeFolder  = :nomeFolder order by c.idCountryArea")
})

您拥有一个国家/地区属性,同时尝试使用国家/地区名称创建别名。 还是你想加入他们

如果您尝试加入它们并按Country对象中的特定属性排序,您可以尝试以下操作

@NamedQueries({
@NamedQuery(name = "kmCountryListByName", query = "SELECT c FROM KMCountryArea c JOIN c.country cc WHERE c.nomeFolder  = :nomeFolder order by cc.idCountry")

在上面的示例中,您可以看到两个对象之间的连接以及基于Country对象属性的order by子句

您有
order by Country.idCountry
,但该字段实际上被命名为
idCountryArea
。这似乎有效。应用程序现在开始,我没有例外