Restrictions.sqlRestriction参数索引超出范围

时间:2011-12-28 13:53:23

标签: java mysql hibernate

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

我的代码是:

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();
}

和模板:

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

但是我得到了:

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)

以及?没有被标签取代。

有什么问题?

1 个答案:

答案 0 :(得分:1)

尝试使用以下限制:

"tags REGEXP ?"

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

"[[:<:]]" + yourOriginalParameter + "[[:>:]]"