[英]Getting ERROR unexpected token in Hibernate 4
Hi I developing a web app using spring mvc 3 and hibernate 4. I'm using annotations for all config. 嗨,我使用Spring MVC 3和Hibernate 4开发了一个Web应用程序。我对所有配置都使用了注释。
When I try to select a entity I get an error: 当我尝试选择一个实体时出现错误:
DaoException: unexpected token: MEMBER near line 1, column 37 [from clanwar.model.ClanMember where MEMBER = :member]
at clanwar.dao.impl.ClanMemberDao.findByPlayerId(ClanMemberDao.java:71)
If I do the query with .createSQLQuery()
hibernate return me an Object[]
instance of ClanMember
entity. 如果我使用.createSQLQuery()
休眠进行查询, .createSQLQuery()
ClanMember
实体的Object[]
实例返回给我。
Method in DAO: DAO中的方法:
@Repository
@Transactional
...
@Override
public ClanMember findByPlayerId(int id) throws DaoException {
ClanMember foundMember;
try {
foundMember = (ClanMember) getSession()
.createQuery("from ClanMember where MEMBER = :member")
.setParameter("member", id)
.uniqueResult();
} catch (Exception e) {
throw new DaoException(e.getMessage());
}
return foundMember;
}
...
Entity: 实体:
@Entity
@Table(name = "CLAN_MEMBERS")
public class ClanMember implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@ManyToOne
@JoinColumn(name = "CLAN")
private Clan clan;
@Id
@ManyToOne
@JoinColumn(name = "MEMBER")
private Player member;
@ManyToOne
@JoinColumn(name = "ROLE")
private ClanRole role;
public ClanMember() {}
// Setters and getters
}
Table CLAN_MEMBERS: 表CLAN_MEMBERS:
+--------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| CLAN | int(11) | NO | PRI | NULL | |
| MEMBER | int(11) | NO | PRI | NULL | |
| ROLE | int(11) | NO | | 1 | |
+--------+---------+------+-----+---------+-------+
What I'm doing wrong? 我做错了什么? Thanks in advance. 提前致谢。
Your query should be like following: 您的查询应如下所示:
from ClanMember where member = :member
Therefore your code to get member should look like following: 因此,获取成员的代码应如下所示:
foundMember = (ClanMember) getSession()
.createQuery("from ClanMember where member = :member")
.setParameter("member", id)
.uniqueResult();
And also note that id
which you pass should be an instance of Player
class. 还要注意,传递的id
应该是Player
类的实例。
member
is a reserved word in HQL. member
是HQL中的保留字。 Escape it by adding a table alias. 通过添加表别名对其进行转义。
Also, since member
is of type Player
, when your where clause
contains member
you need to provide a parameter of type Player
. 另外,由于member
的类型为Player
,因此当where clause
包含member
您需要提供Player
类型的参数。 Alternatively if you want to provide the ID as you're doing, you need to explicitly search for the id
: 另外,如果您想在执行操作时提供ID,则需要显式搜索id
:
So either: 所以:
foundMember = (ClanMember) getSession()
.createQuery("from ClanMember c where c.member = :member")
.setParameter("member", someInstanceOfPlayer);
.uniqueResult();
or 要么
foundMember = (ClanMember) getSession()
.createQuery("from ClanMember c where c.member = :member")
.setParameter("member", idOfAPlayer);
.uniqueResult();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.