1

私のプロジェクトには多くのエンティティがあり、HQL クエリを使用して複数のエンティティからデータを取得したいと考えています。HQL クエリでは、JOINS を使用して Entities からデータを取得しようとしましたが、コードが実行されると例外が生成されます。以下は例外です:

org.hibernate.hql.ast.QuerySyntaxException: Path expected for join! [SELECT s.id, s.name, s.url, s.uuid, s.createdBy , t.id , u.id , u.name FROM com.insonix.qrata.models.Site s INNER JOIN s.topics t INNER JOIN User u  WHERE lower(s.name) LIKE lower(:name)  AND s.createdBy IN (:created_by) AND u.id = s.createdBy]

以下はクエリです:

SELECT s.id, s.name, s.url, s.uuid, s.createdBy , t.id , u.id , u.userinfo.firstname , u.userinfo.lastname FROM Site s INNER JOIN s.topics t INNER JOIN User u WHERE lower(s.name) LIKE lower(:name)  AND s.createdBy IN (:created_by) AND u.id = s.createdBy

以下は私のエンティティです:

public class CommonEntity {
-------------------
 private Long createdBy;
 private String uuid;
------------------------
}

public class Site extends CommonEntity{
 private long id;
 private String url;
 private String name;
 private Category category;
 private List<Topic> topics = new ArrayList<>(0);
  ---------------------------
}

public class Topic extends CommonEntity{
 private int id;
 private List<Site> sites = new ArrayList<Site>(0);
----------------------------------- 
}

public class User extends CommonEntity
 private long id;
 private UserInfo userinfo;
--------------------------------
}

public class UserInfo extends CommonEntity{
 private String firstname;
 private String lastname;
}
4

1 に答える 1

2

パスの予期されるエラーは、休止状態がユーザーとサイトの関連付けまたはマッピングを見つけようとしていることを示しています。Hibernate がエンティティに参加するには、関連付けを定義しておく必要があります。hibernate には ON 句がないため、上記のクエリで指定する方法、「INNER JOIN User u ON ???」に参加する場所 ( https://stackoverflow.com/a/12669051/830945 )

このように必要な結果を達成できます

SELECT s.id, s.name, s.url, s.uuid, s.createdBy, t.id , u.id , u.userinfo.firstname , u.userinfo.lastname FROM Site s, User u INNER JOIN s.topics t WHERE lower(s.name) LIKE lower(:name)  AND s.createdBy IN (:created_by) AND u.id = s.createdBy
于 2013-07-01T09:18:53.897 に答える