createNativeQuery()& createQuery() with NamedParameter
createNativeQuery()& createQuery() with NamedParameter
我有一个实体 CategoryElement
:
@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
有我的查询:
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()
方法:
Query query = manager.createNativeQuery("select * from category_element where farsi_name =: param", CategoryElement.class);
query.setParameter("param",farsiName);
但我在第 2 行再次收到相同的消息 param
我检查这个 Link
但这并没有解决我的问题。
我不知道。
编辑:我正在使用 jdk1.8 + tomcat 9 + Hibernate 5.4.27
- 尝试替换为:
@Entity(name = "CategoryElement ")
通过这个:
@Entity(name = "CategoryElement")
我建议您完全删除 @Entity
注释中的 name
参数,只留下:
@Entity
默认情况下 name
已经等于实体的非限定名称 class。
- 关于您的JPQL,我建议您按以下方式更正:
List<CategoryElement> categoryElementList = manager.createQuery(
"select o from CategoryElement o where o.farsiName = :param",
CategoryElement.class
)
.setParameter("param", farsiName)
.getResultList();
这里还有几个注意事项:
您应该在 JPQL 中使用实体字段名称,而不是 table 列名称。
最好避免使用java raw types。因此,您应该更喜欢使用 return TypedQuery<T>
的那些 EntityManager.createQuery
方法
- 对于您的原生查询,您可以通过以下方式更正:
List<CategoryElement> categoryElementList = manager.createNativeQuery(
"select * from category_element where farsi_name = :param",
CategoryElement.class
)
.setParameter("param",farsiName)
.getResultList();
我有一个实体 CategoryElement
:
@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
有我的查询:
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()
方法:
Query query = manager.createNativeQuery("select * from category_element where farsi_name =: param", CategoryElement.class);
query.setParameter("param",farsiName);
但我在第 2 行再次收到相同的消息 param
我检查这个 Link
但这并没有解决我的问题。
我不知道。
编辑:我正在使用 jdk1.8 + tomcat 9 + Hibernate 5.4.27
- 尝试替换为:
@Entity(name = "CategoryElement ")
通过这个:
@Entity(name = "CategoryElement")
我建议您完全删除 @Entity
注释中的 name
参数,只留下:
@Entity
默认情况下 name
已经等于实体的非限定名称 class。
- 关于您的JPQL,我建议您按以下方式更正:
List<CategoryElement> categoryElementList = manager.createQuery(
"select o from CategoryElement o where o.farsiName = :param",
CategoryElement.class
)
.setParameter("param", farsiName)
.getResultList();
这里还有几个注意事项:
您应该在 JPQL 中使用实体字段名称,而不是 table 列名称。
最好避免使用java raw types。因此,您应该更喜欢使用 return
的那些TypedQuery<T>
EntityManager.createQuery
方法
- 对于您的原生查询,您可以通过以下方式更正:
List<CategoryElement> categoryElementList = manager.createNativeQuery(
"select * from category_element where farsi_name = :param",
CategoryElement.class
)
.setParameter("param",farsiName)
.getResultList();