0

Spring Roo を使用して (ただし、これらのメソッドを手動で作成しているため、関連性がない可能性があります)、2 つのテーブルを 1 つのリストに表示しようとしています。クラス people.java でユーザー名を持つすべての人を取得する以下の方法があります。この方法は正しく機能すると思います。

public static TypedQuery<Person> findAllPeople() {
  String queryStr = "SELECT o.name, b.username FROM Person o INNER JOIN o.users b";
  TypedQuery<Person> query = entityManager().createQuery(queryStr, Person.class);
  return query;
}

ここにコントローラーのコードがあります

@RequestMapping(produces = "text/html")
public String list(@RequestParam(value = "page", required = false) Model uiModel) {
    uiModel.addAttribute("people", Person.findAllPeople());
    return "people/list";
}

これを list.jspx で実行しようとすると、「要求された結果の型 [com.test.peopletest.Person] を使用して複数の戻り値を持つクエリの TypedQuery を作成できません。」というエラーが表示されます。

すべての結果が正しく出力されたこのクエリを返す方法を知っている人はいますか?

4

2 に答える 2

2

Person オブジェクトをクエリしていません。クエリは 2 つの文字列を返すようです

  SELECT o.name, b.username...

Person を返すには、

  SELECT o FROM Person o

クエリを見るだけで、個人オブジェクトを取得したら、ユーザー/ユーザー名にドリルダウンできるように見えます。

于 2012-07-27T13:49:12.687 に答える
0

次のようなものを使用できるようです...

SELECT o FROM Person o FETCH JOIN o.users b

person.usersを歩くと、すべてのユーザーがメモリからロードされます(DBラウンドトリップはありません)。

または、理論的には(テストされていない状態で読んでください!!)、

SELECT o.name, b.username FROM Person o FETCH JOIN o.users b
TypedQuery<String[]> query = entityManager().createQuery(queryStr, String[]);  
于 2012-08-13T21:06:18.300 に答える