2015-03-15 2 views
1

Я хочу, чтобы сделать запрос, используя соединение, я проверил его, но я эта ошибкаHibernate запрос с присоединиться: QuerySyntaxException: неожиданный маркер

org.hibernate.hql.ast.QuerySyntaxException: unexpected token..

я сделал:

public List <Card>getCard(Client c) { 
     ClientDAO cd = new ClientDAO(); 
     List<Card> ca = getSessionFactory().getCurrentSession().createQuery("select ca.column1,e.column2 from card ca join ens e on ca.ide=e.ide where ca.idclient="+ cd.getClient(c).getIdclient()).list();//this is a method to get the current client 
     return ca; 

ответ

0

Вы использовали SQL для написания запроса HQL. В случае Card компании имеет ens ассоциацию, вы бы написать запрос так:

List<Card> ca = getSessionFactory().getCurrentSession() 
    .createQuery(
     "select ca " + 
       "from Card ca " + 
       "join fetch ca.ens " + 
       "where ca.idclient = :idclient") 
     .setParameter("idclient", cd.getClient(c).getIdclient()) 
     .list(); 
    return ca; 
} 

Если вы хотите запрос SQL, так как у вас есть прогноз, вы бы написать родной запрос вместо:

List<Object[]> ca = getSessionFactory().getCurrentSession() 
    .createSQLQuery(
     "select ca.column1, e.column2 " + 
     "from card ca " + 
     "join ens e on ca.ide=e.ide " + 
     "where ca.idclient = :idclient") 
    .setParameter("idclient", cd.getClient(c).getIdclient()) 
.list(); 

В этом случае вы получаете List из Object[]. Каждый Object[] связан с выбранной строкой, и каждый элемент массива является значением столбца.

+0

Знаете ли вы причину этой ошибки: ** Исключение в теме "main" org.hibernate.MappingException: Нет Диалоговое отображение для типа JDBC: -1 ** – mimi

+0

Как это записать с помощью ** HQL ** please – mimi

+0

Я уже дал вам запрос HQL. Для пропавшего диалекта вы найдете другой ответ SO точно. –

Смежные вопросы