Mysql sqlexception索引超出正确sql语句的范围
我有一个sql语句,它运行得非常好。但在我的webapp中使用play 2.1实现时,我遇到了以下错误: javax.persistence.PersistenceException:查询抛出了SQLException:列索引超出范围,0<1 我在这里发现了这个问题: 但我还有其他例外 我正在尝试获取包含标记列表的标记线程(与堆栈溢出相同)。 下面是sql语句Mysql sqlexception索引超出正确sql语句的范围,mysql,playframework-2.0,ebean,Mysql,Playframework 2.0,Ebean,我有一个sql语句,它运行得非常好。但在我的webapp中使用play 2.1实现时,我遇到了以下错误: javax.persistence.PersistenceException:查询抛出了SQLException:列索引超出范围,0
SELECT t.topic
FROM topic t
WHERE 3 = (SELECT COUNT( DISTINCT ta.id )
FROM topic_tag tt
INNER JOIN tag ta ON ta.id = tt.tag_id
WHERE ta.name IN ('children', 'spain','new')
AND tt.topic_id = t.id )
在游戏中,我会这样做:
RawSql rawSql = RawSqlBuilder.unparsed(sqlString).create();
result = find.setRawSql(rawSql).findList();
然后,我得到了越界例外。之后,我尝试设置列映射:
RawSql rawSql = RawSqlBuilder.unparsed(sqlString)
.columnMapping("t.topic","topic")
.columnMapping("t.id","id")
.columnMapping("ta.name","tagList.name")
.columnMapping("ta.id","tagList.id")
.create();
现在我得到一个空指针异常。可能是因为Eben无法从中创建查询
下面是我的模型中的一些代码:
@Entity
public class Topic extends Model{
@Id
public Long id;
@Required
public String topic;
@ManyToMany
public List<Tag> tagList;
}
@Entity
public class Tag extends Model {
@Id
public long id;
@Required
public String name;
}
@实体
公共类主题扩展模型{
@身份证
公共长id;
@必需的
公共字符串主题;
@许多
公共列表标记列表;
}
@实体
公共类标记扩展模型{
@身份证
公共长id;
@必需的
公共字符串名称;
}
在经历了很多尝试和挫折之后,我希望有人能得到一个提示或解决方案。我只是在类似的问题上浪费了几个小时,实际上我只通过为某种模型映射
id
字段并选择较少的字段来解决它,之后其他值会自动加载-因此基本上,如果我尝试选择以下值,则出现错误:
。。从示例表e中选择e.id、e.name、e.description.
并使用如下映射:
RawSql rawSql = RawSqlBuilder.parse(sql)
// map the sql result columns to bean properties
.columnMapping("e.id", "exampleModel.id")
.columnMapping("e.name", "exampleModel.name")
.columnMapping("e.description", "exampleModel.description")
.create();
当我更改为仅选择e.id
和地图时:
RawSql rawSql = RawSqlBuilder.parse(sql)
// map the sql result columns to bean properties
.columnMapping("e.id", "exampleModel.id")
.create();
它还将e.name
和e.description
加载到模型值,错误消失。
(当然,我自己的查询有几个连接,比这复杂一点,但基本原理是一样的。)
总结一下:当这个问题发生时,请检查您没有两次加载任何内容(columnMapping),使用System.out.println(“”);或类似于检查已为模型加载了哪些值。请记住还要检查注释,例如“@JoinColumn”,它可能会在同一模型下加载更多数据-仅基于给定的e.id
值。如果不选择并将e.id
设置为columnMapping值,则可能需要将所有需要的字段分别列为。。e、 名称,如描述..
希望这些发现能帮助一些人