首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Restrictions.sqlRestriction参数索引超出范围

Restrictions.sqlRestriction参数索引超出范围
EN

Stack Overflow用户
提问于 2011-12-28 21:53:23
回答 1查看 1.6K关注 0票数 0

我想在MySQL和Hibernate中搜索“全字匹配”。

我的代码是:

代码语言:javascript
复制
public Collection<Template> findByOneTag(String tags) {
    // since the tags are in , format we will replace it with |
    return getSession().createCriteria(Template.class)
            .add(Restrictions.sqlRestriction("tags REGEXP '[[:<:]]?[[:>:]]'", tags.replaceAll(",", "|"), StandardBasicTypes.STRING)).list();
}

和模板:

代码语言:javascript
复制
    @Entity
public class Template implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="template_id")
    private int templateId;

    @Lob()
    private String content;

    @Column(name="method_id")
    private byte methodId;

    private String subject;

    private String tags;

    @Column(name="template_name")
    private String templateName;

    private String thumbnail;
}

然而,我得到了:

代码语言:javascript
复制
Caused by: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3729)

以及?不会被替换为标签。

怎么啦?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-28 22:00:58

尝试使用以下限制:

代码语言:javascript
复制
"tags REGEXP ?"

并将以下值作为参数进行传递:

代码语言:javascript
复制
"[[:<:]]" + yourOriginalParameter + "[[:>:]]"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8656790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档