Hibernate createNativeQuery()&;使用NamedParameter创建查询()
我有一个实体Hibernate createNativeQuery()&;使用NamedParameter创建查询(),hibernate,prepared-statement,jpql,Hibernate,Prepared Statement,Jpql,我有一个实体CategoryElement: @Entity(name = "CategoryElement ") @Table(name = "category_element") public class CategoryElement { @Column(columnDefinition = "varchar(100)", name = "farsi_name",nullable = false) pr
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
中所做的相同的查询,但我得到了一个语法错误无法解析符号
我的问题是:
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;
}
但是我在第2行中再次得到了param
的相同消息 我检查一下这个 但这并不能解决我的问题。
我不知道 编辑:我正在使用jdk1.8+Tomcat9+Hibernate5.4.27
@Entity(name=“CategoryElement”)
据此:
@Entity(name=“CategoryElement”)
我建议您完全删除@Entity
注释中的name
参数,只留下:
@实体
默认情况下,name
已等于实体类的非限定名称
List categoryElementList=manager.createQuery(
“从CategoryElement o中选择o,其中o.farsiName=:param”,
类别
)
.setParameter(“参数”,farsiName)
.getResultList();
这里有几个注意事项:
- 您应该在JPQL中使用实体字段名,而不是表列名
- 最好避免使用。因此,您应该更喜欢使用那些返回
TypedQuery
List categoryElementList=manager.createNativeQuery(
“从类别元素中选择*,其中波斯语名称=:param”,
类别
)
.setParameter(“参数”,farsiName)
.getResultList();
按照您建议的JPQL格式的第一种方式,我在.setParameter(“param”,farsiName)
中得到了'param'
的语法错误;在第二种情况下,我在这一行遇到了与CategoryElement相同的问题:“从CategoryElement o中选择o,其中o.farsiName=:param”
,尽管我更改了您在entity类中提到的内容。最后我用位置参数找到了答案@Sternk您得到的确切语法错误是什么?请显示完整堆栈跟踪。哦,我又犯了一个错误。。。你的解决方案很好,非常感谢。
Query query = manager.createNativeQuery("select * from category_element where farsi_name =: param", CategoryElement.class);
query.setParameter("param",farsiName);