Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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
Java 强制ebean在生成的查询中不包含ID_Java_Ebean - Fatal编程技术网

Java 强制ebean在生成的查询中不包含ID

Java 强制ebean在生成的查询中不包含ID,java,ebean,Java,Ebean,我正在构建一个select,它必须从表中获取所有不同的值 我通常编写的sql如下所示:“从MUSICLIB中选择不同的艺术家” 但是,ebean正在生成以下内容:“从MUSICLIB中选择不同的ID,艺术家” 查找者是这样的: find.select("artist").setDistinct(true).findList(); 我发现无论我设置了什么选项,ebean都会在每个查询中生成这个ID 如何完成我要寻找的内容?你不能这样做,Ebean for objects mapping需要ID字

我正在构建一个select,它必须从表中获取所有不同的值

我通常编写的sql如下所示:
“从MUSICLIB中选择不同的艺术家”

但是,ebean正在生成以下内容:
“从MUSICLIB中选择不同的ID,艺术家”

查找者是这样的:

find.select("artist").setDistinct(true).findList();
我发现无论我设置了什么选项,ebean都会在每个查询中生成这个ID


如何完成我要寻找的内容?

你不能这样做,Ebean for objects mapping需要ID字段,如果你不包含它,你会得到一些神秘的异常

相反,您可以在不映射的情况下查询数据库,然后自己编写SQL语句:

SqlQuery sqlQuery = Ebean.createSqlQuery("SELECT DISTINCT artist FROM musiclib");
List<SqlRow> rows = sqlQuery.findList();

for (SqlRow row : rows) {
    debug("I got one: " + row.getString("artist"));
}
SqlQuery SqlQuery=Ebean.createSqlQuery(“从musiclib中选择不同的艺术家”);
List rows=sqlQuery.findList();
for(SqlRow行:行){
调试(“我得到了一个:”+row.getString(“艺术家”));
}

当然,如果
artist
是一个关系,您需要使用(…)表达式中的
找到的ID列表执行额外的查询。

好吧,那么接下来,当ebean生成带前缀的表名而我们无法在远程安装中查找时,该怎么办?我偶然发现了您已经给出的答案,但现在表名是一个问题,因为它们可能在不同的数据库中以不同的方式生成,这取决于客户的需求。我从Ebean服务器配置中找到了一些关于NamingConvention的内容,但返回null。我应该单独问一个问题吗?如何设置表前缀?同时,我创建了一个错误报告:关于前缀:我不知道。我假设ebean能够做到这一点,并且一些客户可能希望获得他们所有的表。TBH我总是要求客户提供空数据库,因此不需要额外的前缀,在这种情况下,tablename永远不会更改:)您可以在application.conf中为表前缀添加配置属性,因此,您将能够阅读它并在自定义查询中使用前缀tablename。更新:此问题已在4.2.0版中根据github.com/ebean-orm/avaje-ebeanrom/issues/158修复