我在休眠状态下创建了多对一映射。以下是设置
<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不能使用。