8

劇中では eBean クエリを使っています!個別の列に基づいてレコードのリストを見つけるためのフレームワーク。これは非常に単純なクエリのように見えますが、問題は、ebean メソッド setDistinct(true) が実際にはクエリを個別に設定していないことです。

私のクエリは次のとおりです。

List<Song> allSongs = Song.find.select("artistName").setDistinct(true).findList();

私の結果では、アーティスト名が重複しています。

私が見てきたことから、これは正しい構文だと思いますが、間違っている可能性があります。助けていただければ幸いです。ありがとうございました。

4

4 に答える 4

2

私はまったく同じ問題に直面したばかりで、それを理解できません。hfsが言ったように、それは後のバージョンで修正されましたが、しばらく動けなくなった場合は使用できます

findSet()

だからあなたの例では

List<Song> allSongs = Song.find.select("artistName").setDistinct(true).findSet();
于 2015-11-17T13:33:08.137 に答える
1

問題 #158: Ebean バグ トラッカーで setDistinct を使用するためのサポートを追加する (生成された sql から id プロパティを除外することにより)によると、選択クエリの先頭に ID 列が暗黙的に追加されるという問題があります。これにより、distinct キーワードが ID 列に作用し、常に固有になります。

これは、Ebean 4.1.2 で修正される予定です。

于 2014-10-01T10:18:07.037 に答える
0

代わりに、ネイティブ SQL クエリ (SqlQuery) を使用できます。メカニズムについては、 https ://ebean-orm.github.io/apidocs/com/avaje/ebean/SqlQuery.html で説明しています。

これはドキュメントからのものです:

public interface SqlQuery
extends Serializable
Query object for performing native SQL queries that return SqlRow's.
Firstly note that you can use your own sql queries with entity beans by using the SqlSelect annotation. This should be your first approach when wanting to use your own SQL queries.

If ORM Mapping is too tight and constraining for your problem then SqlQuery could be a good approach.

The returned SqlRow objects are similar to a LinkedHashMap with some type conversion support added.

// its typically a good idea to use a named query
// and put the sql in the orm.xml instead of in your code

    String sql = "select id, name from customer where name like :name and status_code = :status";

    SqlQuery sqlQuery = Ebean.createSqlQuery(sql);
    sqlQuery.setParameter("name", "Acme%");
    sqlQuery.setParameter("status", "ACTIVE");

    // execute the query returning a List of MapBean objects
    List<SqlRow> list = sqlQuery.findList();
于 2015-11-27T01:15:56.033 に答える