gpt4 book ai didi

java - 为什么我收到与 JPQL 查询相关的 HibernateException(命名查询中的错误)?

转载 作者:太空宇宙 更新时间:2023-11-04 06:09:05 27 4
gpt4 key购买 nike

我是 Hibernate 的新手,在应用程序中定义 JPQL 查询时遇到以下问题。

所以我有以下情况:

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

@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")
})

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

public interface KMCountryAreaService {

@Transactional
public List<KMCountry> getCountryListByName(Long 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;
}

}

因此,如您所见,getCountryListByName() 方法获取我在模型类 (KMCountryArea) 中定义的 kmCountryListByName

问题是,当我尝试启动我的应用程序(它是一个 LifeRay 门户,但我认为这并不重要)时,我在堆栈跟踪中收到以下错误消息:

 <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 子句

关于java - 为什么我收到与 JPQL 查询相关的 HibernateException(命名查询中的错误)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28938998/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com