我在休眠状态下创建了多对一映射。以下是设置

<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]


不确定,可以采取什么措施解决此问题。有什么建议么 ?

最佳答案

在这里queryString = "from Contact where cgid = :id"您正在使用HQL.cgid是数据库列名称。您必须编写Contact类变量而不是cgid。并且此变量必须与cgid映射。如果将本地sql查询与hibernate一起使用,则可以使用数据库列名称,但hql不能使用。

08-04 19:43