2015-07-23 2 views
0

Я пытаюсь получить доступ к базе данных FK с использованием именованного запроса SQL с Hibernate, идея состоит в том, чтобы запросить таблицу клиентов, которая содержит имя и companyId, и т. Д. CompanyId - это FK для таблицы компаний. Запрос я написал следующий образом:Проблема с записью sql-запроса с hibernate

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

Что такое проблема здесь?

ответ

0

Для этого мне нужно будет увидеть, как вы сопоставляете отображение в классе модели, но запрос должен идти следующим образом.

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

Так, попробовать его, дайте мне знать, если есть какие-либо проблемы

+0

Так же он работал? –