Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql sqlexception索引超出正确sql语句的范围_Mysql_Playframework 2.0_Ebean - Fatal编程技术网

Mysql sqlexception索引超出正确sql语句的范围

Mysql sqlexception索引超出正确sql语句的范围,mysql,playframework-2.0,ebean,Mysql,Playframework 2.0,Ebean,我有一个sql语句,它运行得非常好。但在我的webapp中使用play 2.1实现时,我遇到了以下错误: javax.persistence.PersistenceException:查询抛出了SQLException:列索引超出范围,0

我有一个sql语句,它运行得非常好。但在我的webapp中使用play 2.1实现时,我遇到了以下错误: javax.persistence.PersistenceException:查询抛出了SQLException:列索引超出范围,0<1

我在这里发现了这个问题: 但我还有其他例外

我正在尝试获取包含标记列表的标记线程(与堆栈溢出相同)。 下面是sql语句

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、 名称,如描述..

希望这些发现能帮助一些人