1

私はHibernateとSQLを初めて使用するので、何か間違ったことをしたのに、2日目を費やした後でも表示されない可能性があります。

私のPostgreSQLDBには、2つのテーブルがあります。

PieChartResult
+---------+---------+--------------+-------+----------+----------+----------------+
| id      | answer  | approvalrate | input | worktime | workerid | piecharthit_id |
+---------+---------+--------------+-------+----------+----------+----------------+


PieChartHit
+---------+-----------+
| id      | truevalue |
+---------+-----------+

次に、SQLステートメントに続いてpgAdminを記述します。これは、完全に正常に機能します。

 SELECT DISTINCT input, answer FROM piecharthit INNER JOIN piechartresult ON piecharthit.id=piechartresult_piecharthit_id;

各入力について収集されたすべての回答を確認できる結果テーブルが表示されます。

同じステートメントをJavaで書き込もうとしているとき

Query q = em.createQuery(SELECT DISTINCT a FROM PieChartHit a INNER JOIN a.PiechartResult b WHERE a.id=b.piecharthit_id")

例外が発生します:

Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: PieChartResult of: PieChartHit [SELECT DISTINCT a FROM PieChartHit a INNER JOIN a.PieChartResult b WHERE a.id=b.piecharthit_id]
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1364)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1300)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:294)
at Driver.main(Driver.java:37)
Caused by: org.hibernate.QueryException: could not resolve property: PieChartResult of: PieChartHit [SELECT DISTINCT a FROM PieChartHit a INNER JOIN a.PieChartResult b WHERE a.id=b.piecharthit_id]

両方のクラスは次のようになります。

@Entity
@Table(name="PieChartResult")
public class PieChartResult {

@Id
@GeneratedValue
private Long id;

private String workerID;
private String approvalRate;
private String input;
private double answer;

@ManyToOne
private PieChartHit piecharthit;

@Entity
@Table(name="PieChartHIT")
public class PieChartHit {

@Id
@GeneratedValue
private Long id;

private double trueValue;

誰かがこの失われた魂を導いてくれませんか?:(

4

2 に答える 2

0

手始めに、SQLではなくHQLを作成する必要があります。これは、テーブル/列名の代わりにクラス/フィールド名を使用することを意味します。例外には「プロパティを解決できませんでした」と記載されていることに注意してください。

また、クエリ行のhql文字列の前後に引用符がありません。

コードに基づいて編集します。PieChartHitへの参照から選択しPieChartResultていますが、関係が双方向であるようには見えません。また

@Table(name="PieChartHIT")

大文字と小文字の問題があるようです。

于 2012-08-23T20:12:51.190 に答える
0

This is in continuation with the original comment It shows how to grab the result into a list.. I think you need to change your Class Definition of PieChartResult and PieChartHit in order for the hibernate to work.

String hql = "from CrawlerElement e where request.id = :requestId";
Query q = getSession().createQuery(sql); //getSession is not the actual method.
q.setParameter("requestId", id);
elements = q.list(); //elements is a List<CrawlerElement> where CrawlerElement which is actual @Entity
return elements;
于 2012-08-23T20:58:01.900 に答える