当前位置: 首页 > 知识库问答 >
问题:

在Hibernate 4 中获取错误意外令牌

孔征
2023-03-14

嗨,我使用Spring mvc 3 和Hibernate 4 开发一个 Web 应用程序。我正在为所有配置使用注释。

当我尝试选择一个实体时,出现错误:

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)

如果我用< code >进行查询。create SQL query() hibernate返回一个< code>ClanMember实体的< code>Object[]实例。

道中的方法:

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

}

表 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       |       |
+--------+---------+------+-----+---------+-------+

我做错了什么?先谢谢你。

共有2个答案

穆铭晨
2023-03-14

您的查询应如下所示:

from ClanMember where member = :member

因此,获取成员的代码应如下所示:

foundMember = (ClanMember) getSession()
                .createQuery("from ClanMember where member = :member")
                .setParameter("member", id)
                .uniqueResult();

还要注意,您传递的< code>id应该是< code>Player类的一个实例。

廖臻
2023-03-14

成员是 HQL 中的保留字。通过添加表别名来转义它。

此外,由于< code>member属于< code>Player类型,因此当< code>where子句包含< code>member时,您需要提供一个< code>Player类型的参数。或者,如果您想提供ID,您需要显式搜索< code>id:

所以要么:

 foundMember = (ClanMember) getSession()
            .createQuery("from ClanMember c where c.member = :member")
            .setParameter("member", someInstanceOfPlayer);
            .uniqueResult();

 foundMember = (ClanMember) getSession()
            .createQuery("from ClanMember c where c.member = :member")
            .setParameter("member", idOfAPlayer);
            .uniqueResult();
 类似资料:
  • 问题内容: 我尝试了以下简单的JavaScript代码: 例如,在Chrome控制台中,这将返回 SyntaxError:意外令牌: 我在JSONLint上尝试了JSON ,它是有效的。 您看到错误了吗? 问题答案: FWIW,改为使用。比。

  • 问题内容: 尝试解析此JSON字符串时出现错误 扩展的字符串对象: 问题答案: 验证您的json字符串。如果可以,请尝试以下操作:

  • 请帮助我有可能的解决方案我对Android开发还很陌生

  • 我正在尝试使用React创建一个简单的网站,但由于某些原因,它只显示一个空白页面。 显示在控制台日志上的错误是未捕获的语法错误:意外令牌 非常感谢。 HTML: 主JS: Navbar: 身体

  • 应用程序。js公司 在执行上述代码时,我得到以下错误。 当我将鼠标悬停在线上方时,会出现这个错误 在我的VS代码中。 当我使用node运行代码时,即在上。我在终端中收到以下错误: 我做错了什么?我希望最后的obj的值是{1:,2:,3:}

  • 在My Gulpfile.js错误部分: 我的包裹。json: 我运行并得到以下错误。 在终端屏幕中: gulp.task('webpack',gulp.series(async()=