2016-09-04 7 views
1

の限られた数のエンティティのコレクションを選択は、多くの多くの - 私は、多くの関係に多くにある2つのenitityクラスを持って決定したフィールドなしとの結果

@Entity 
public class User implements Serializable { 
    ... 

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "members") 
    private Set<Group> groups = new HashSet<>(); 

} 

@Entity 
public class Group implements Serializable { 
    ... 

    @JoinTable(name = "user_groups", 
      joinColumns = {@JoinColumn(name = "group_id")}, 
      inverseJoinColumns = {@JoinColumn(name = "user_id")}) 

    private Set<User> members = new HashSet<>(); 

}

特定のグループをリクエストすると、私は次のようになります:

{ 
    "id": 12, 
    "adminId": 12345, 
    "name": "name", 
    "category": "cat", 
    "city": "city", 
    "members": [ 
    { 
     "id": 1, 
     "firstName": "SomeName", 
     "birthday": 802476000000, 
     "city": "SomeCity", 
     "country": "SomeCountry", 
     "age": 21, 
     "groups": [ 
     { 
      "id": 1, 
      "adminId": 123, 
      "name": "Some group name", 
      "category": "some category", 
      "city": "some city" 
     } 
     ], 
     "picturePath": some path 
    } 
] 

} idで特定のグループを取得したいときは、メンバーフィールドにグループフィールドを持たないユーザーとデータベースの上位100行しか持たないとします。 はあなたが理解ホープ:ユーザーが多くのグループやグループに属している私はこのような何かを取得したい多くのユーザー

を持っている:私の心に来る何

{ 
    "id": 12, 
    "adminId": 12345, 
    "name": "name", 
    "category": "cat", 
    "city": "city", 
    "members": [ 
    { 
     "id": 1, 
     "firstName": "SomeName", 
     "birthday": 802476000000, 
     "city": "SomeCity", 
     "country": "SomeCountry", 
     "age": 21, 
     "picturePath": some path 
    } 
] 

はこれ(結合表のクラスを作成し、エンティティのことですuser_id、group_idという列があります)と、与えられたgroup_idのuser_idsの結果を得るループを作成します。興味のあるフィールドを持つユーザーを取得します。

タプルクエリを使用する必要がありますか?私の問題であなたの時間を過ごすための おかげ

答えて

0

ああ愚かな私:)

Query query = entityManager.createNativeQuery("SELECT u.user_id,u.birthdate,u.first_name,u.city,u.country,u.age,u.picture_path " + 
       "FROM users u " + 
       "INNER JOIN user_groups ug " + 
       "ON ug.user_id = u.user_id WHERE ug.group_id = ?",User.class); 

USER_GROUPSが参加するテーブルであり、結果のカウントは(MySQLで)LIMITを使用して行うことができ

関連する問題