2015-05-01 3 views
1

Я создал многозначное отображение в спящем режиме. Ниже приводится настройкаОбратитесь к внешнему ключу в Hibernate, который не имеет свойства

<many-to-one name="groups" class = "Groups" column="cgid" unique="true" not-null="true" cascade="all"/> 

В mysql создается таблица с другим столбцом cgid.

mysql> describe CONTACT 
    -> ; 
+-----------+--------------+------+-----+---------+-------+ 
| Field  | Type   | Null | Key | Default | Extra | 
+-----------+--------------+------+-----+---------+-------+ 
| IDCONTACT | bigint(20) | NO | PRI | NULL |  | 
| FIRSTNAME | varchar(255) | YES |  | NULL |  | 
| LASTNAME | varchar(255) | YES |  | NULL |  | 
| EMAIL  | varchar(255) | YES |  | NULL |  | 
| addressId | bigint(20) | NO | UNI | NULL |  | 
| cgid  | bigint(20) | NO | UNI | NULL |  | 
+-----------+--------------+------+-----+---------+-------+ 

Теперь мне нужно запросить на основе имени cgid.

queryString = "from Contact where cgid = :id"; 
query = session.createQuery(queryString); 
query.setParameter("id", gd.getGid()); 
contactl = query.list(); 

Hibernate постоянно жалуется на то

could not resolve property: cgid of: domain.Contact [from domain.Contact c where c.cgid = :id] 

Не уверен, что можно сделать, чтобы решить эту проблему. Какие-либо предложения ?

+0

Только атрибуты @Entity, разрешенные в HQL, а не фактические имена столбцов БД. Либо создайте новый атрибут для 'cgid' (или), используя собственный SQL-запрос. – K139

ответ

0

Здесь queryString = "from Contact where cgid = :id" Вы используете HQL.cgid - имя столбца базы данных. Вы должны написать переменную класса контактов вместо cgid. И эта переменная должна быть сопоставлена ​​cgid.Если вы используете собственный SQL-запрос с hibernate, вы можете использовать имена столбцов базы данных но с hql нельзя использовать.

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