首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >createNativeQuery()& createQuery()与NamedParameter

createNativeQuery()& createQuery()与NamedParameter
EN

Stack Overflow用户
提问于 2021-05-24 04:04:08
回答 1查看 483关注 0票数 0

我有一个实体CategoryElement

代码语言:javascript
复制
@Entity(name = "CategoryElement ")
@Table(name = "category_element")
public class CategoryElement {
 
 @Column(columnDefinition = "varchar(100)", name = "farsi_name",nullable = false)
 private String farsiName;

  /* and other stuff*/  

我想为这个实体编写一个查询,就像在preparedStatement中那样,但是我得到了这个语法错误cannot resolve symbol

这是我的疑问:

代码语言:javascript
复制
public List<CategoryElement> findByName(String farsiName) {
    EntityManager manager = HibernateUtils.getEntityManager();
    Query query = manager.createQuery("select o from CategoryElement as o where o.farsi_name=:param");
    query.setParameter("param",farsiName);
    List categoryElementList = query.getResultList();
    manager.close();
    return categoryElementList;
}

我在第3行:cannot resolve symbol 'CategoryElement '中得到了语法错误,在第4行中,我得到了关于param的相同消息

我尝试过这样的CreateNativeQuery()方法:

代码语言:javascript
复制
Query query = manager.createNativeQuery("select * from category_element where farsi_name =: param", CategoryElement.class);  
query.setParameter("param",farsiName);    

但是,我在param的第2行中再次收到了相同的消息

我查过这个Link,但它解决不了我的问题。

我不知道。

编辑:我使用的是jdk1.8 1.8+ tomcat 9+ Hibernate 5.4.27

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-24 07:17:37

  1. 试图替换这个:

代码语言:javascript
复制
@Entity(name = "CategoryElement ")

通过这一点:

代码语言:javascript
复制
@Entity(name = "CategoryElement")

我建议您完全删除name注释中的@Entity参数,只留下:

代码语言:javascript
复制
@Entity

默认情况下,name已经等于实体类的非限定名。

  1. 关于您的JPQL,我建议您用以下方式纠正它:

代码语言:javascript
复制
List<CategoryElement> categoryElementList = manager.createQuery(
   "select o from CategoryElement o where o.farsiName = :param",
   CategoryElement.class
)
.setParameter("param", farsiName)
.getResultList();

这里有几个注意事项:

  • 您应该在JPQL中使用实体字段名,而不是表列名.

  • 最好避免使用java raw types。因此,您应该更喜欢使用那些返回TypedQuery<T>

EntityManager.createQuery方法。

对于本机查询,可以通过以下方式更正

代码语言:javascript
复制
List<CategoryElement> categoryElementList = manager.createNativeQuery(
   "select * from category_element where farsi_name = :param",
   CategoryElement.class
)
.setParameter("param",farsiName)
.getResultList();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67666529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档