Java 强制ebean在生成的查询中不包含ID
我正在构建一个select,它必须从表中获取所有不同的值 我通常编写的sql如下所示: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字
“从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修复