当前位置: 首页 > 知识库问答 >
问题:

使用hibernate编写命名sql查询时出现问题

聂鹏云
2023-03-14

我试图访问数据库FK使用命名SQL查询与Hibernate,这个想法是查询一个客户表,其中包含名称,和公司ID等。CompanyId是对应表的FK。我写的查询如下:

@NamedNativeQuery(name="getcustomer", query="Select CUSTOMER.* from CUSTOMER,COMPANY where CUSTOMER_FIRST_NAME = (?1) and CUSTOMER_LAST_NAME= (?2) and CUSTOMER_COMPANY_ID_FK = (?3) ",resultClass=Customer.class)

我目前面临的问题如下:

线程“main”组织中出现异常。冬眠QueryParameterException:位置超出已声明序数参数的数量。请记住,序数参数是基于1的!职位:2个在组织。冬眠发动机查询spi。参数元数据。位于org的getOrdinalParameterDescriptor(ParameterMetadata.java:89)。冬眠发动机查询spi。参数元数据。位于org的getOrdinalParameterExpectedType(ParameterMetadata.java:109)。冬眠内部的AbstractQueryImpl。determineType(AbstractQueryImpl.java:507)位于org。冬眠内部的AbstractQueryImpl。com上的setParameter(AbstractQueryImpl.java:479)。comresource。scrapmetalapp。DAOImpl。客户请求。在com上搜索客户(CustomerDAOImpl.java:61)。comresource。scrapmetalapp。ServiceImpl。CustomerServiceImpl。在com上搜索客户(CustomerServiceImpl.java:39)。comresource。scrapmetalapp。配置。跑main(Run.java:57)

我的DAO实现是这样的:

@Override
   public Customer searchCustomer(String fName, String lName, Integer company) {

   Session session = sessionFactory.openSession();
   return (Customer) session.getNamedQuery("getcustomer").setParameter(1, fName)
           .setParameter(2, lName)
           .setParameter(3, company)
           .uniqueResult();
 }

这里的问题是什么?

共有1个答案

黎腾
2023-03-14

为此,我需要了解如何在模型类中关联映射,但查询应该是这样的。

public Customer getMeThatCustomer(String param1, String param2, int foreignkey){
session = getCurrentSession();
org.hibernate.Query query = session.createQuery("From Customer as c where c.name=:param1 and c.lastname=:param2 and c.company.companyid=:foreignkey");
//Note the last parameter, where I have mentioned c.company, in place of 
company, there should be the foregin key association and then the primary key in java class.
query.setParameter("param1",param1);
query.setP...er("param2",param2);
quer.....("companyid",companyid);
return (Customer) query.uniqueResult();
}

所以,试试看,如果有任何问题,请告诉我

 类似资料:
  • 我有一个sql查询: 这就产生了: Hibernate:选择this_.pName为y0_,this_.kNum为y1_,count(distinct this_.agentg)为y2_from Test_CPView this_where(低(this_.pName+“~”+this_.kNum)like?或低(this_.pName+“~”+this_.kNum)like?或低(this_.p

  • 嗨,伙计们,我试图检索数据从我的数据库使用HQL编辑器查询。我遵循了示例“在JavaSwing应用程序中使用Hibernate”中的步骤。我的配置文件如下: 映射: 使用这个:或我得到以下错误: org.hibernate.exception.SQLGrammarExcture:无法在org.hibernate.exception.SQLStateConverter.convert(SQLStat

  • 问题内容: 我在使用Hibernate和SQL Server 2008时遇到问题。当我尝试将对象保存到数据库时,Hibernate抛出此错误: 用户在数据库中具有选择,插入,更新特权。所以我排除了这个问题。 这是生成的SQL: 如果我在SQL Server中运行上述SQL,它说无效的对象名称emanagement.patient_visit,但是如果我手动添加该“ dbo” emanagement

  • 可以在映射文档中定义查询的名字,然后就可以象调用一个命名的 HQL 查询一样直接调用命名 SQL 查询.在这种情况下,我们不 需要调用 addEntity() 方法。 <sql-query name="persons"> <return alias="person" class="eg.Person"/> SELECT person.NAME AS {person.name},

  • 问题内容: 有没有办法使用HQL在Grails中使用hibernate命名查询? 我已经在《利用hibernate》一书中阅读了有关它们的内容,想知道是否有办法在Grails中使用它们。 像这样的映射文件中包含命名查询以及类映射: 现在,我确定可以包含一个 hibernate映射文件, 并将其集成到Grails GORM配置中,因为在此声明,包含 hibernate映射文件的 可以在Grails中

  • 我对命名查询有问题,但我不明白为什么它不工作。 我是这样定义查询的: 在这里我使用它: 错误:由:组织引起。冬眠HibernateException:命名查询中的错误:getUserRatings