2

パラメータの 1 つとしてリストを使用した動的インスタンス化を使用して、hql クエリを作成したいと思います。

簡単な例:

動的インスタンス化による HQL クエリ:

select new x.y.UserDto(u.name, u.contacts) from User u where u.xyz=:param1 ...

私の dto クラスのコンストラクターは次のとおりです。

public class UserDto {
   private String name;
   private List contacts;

   public UserDto(String name, List contacts) {
      this.name = name;
      this.contacts = contacts;
   }
   ...
}

エンティティ マッピング:

public class User {
  @olumn(name="NAME")
  String name;

  @ManyToMany(targetEntity= Contacts.class, fetch = FetchType.EAGER)
  @JoinTable(name="USER_DEPARTMENT_CONTACTS",
           joinColumns=@JoinColumn(name="DEPARTMENT_ID"),
           inverseJoinColumns=@JoinColumn(name="USER_ID"))
  private List<Contacts> contacts;

  ...      
}

ご覧のとおり、必要なのは、いくつかのプロパティとエンティティのコレクションを持つ新しいオブジェクトを作成することだけです。

Hibernate がこれを達成するには、エンティティごとに複数の結果行が生成されるため、1 つ以上のクエリが必要であることを理解できます。

プロパティとコレクションの組み合わせである新しいオブジェクトを作成できるかどうかは誰にもわかりませんか?

4

1 に答える 1

3

申し訳ありませんが、それは不可能です。JPA仕様によると、

クエリのSELECT句で指定されたクエリ結果のタイプは、ENTITY抽象スキーマタイプ、STATE-FIELDタイプ-NOT A COLLECTION-、集計関数の結果、構築操作の結果、またはいくつかのシーケンスです。これらは。

代わりに次を使用できます。

select DISTINCT new x.y.UserDto(u) from User u LEFT JOIN FETCH u.contacts

したがって、この方法では、連絡先を持つユーザーを取得できます

于 2009-06-27T05:00:50.583 に答える