【问题标题】:Issue with writing named sql query with hibernate使用休眠编写命名 sql 查询的问题
【发布时间】:2015-07-23 14:13:39
【问题描述】:

我正在尝试使用带有 Hibernate 的命名 SQL 查询来访问数据库 FK,其想法是查询包含名称和公司 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)

我目前遇到的问题如下:

线程“主”org.hibernate.QueryParameterException 中的异常: 超出声明的序数参数数量的位置。请记住 序数参数是从 1 开始的!职位:2 在 org.hibernate.engine.query.spi.ParameterMetadata.getOrdinalParameterDescriptor(ParameterMetadata.java:89) 在 org.hibernate.engine.query.spi.ParameterMetadata.getOrdinalParameterExpectedType(ParameterMetadata.java:109) 在 org.hibernate.internal.AbstractQueryImpl.determineType(AbstractQueryImpl.java:507) 在 org.hibernate.internal.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:479) 在 com.comresource.scrapmetalapp.DAOImpl.CustomerDAOImpl.searchCustomer(CustomerDAOImpl.java:61) 在 com.comresource.scrapmetalapp.ServiceImpl.CustomerServiceImpl.searchCustomer(CustomerServiceImpl.java:39) 在 com.comresource.scrapmetalapp.Config.Run.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();
 }

这里有什么问题?

【问题讨论】:

    标签: spring hibernate named-query


    【解决方案1】:

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

    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();
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多