【发布时间】:2012-08-23 20:09:21
【问题描述】:
我是 Hibernate 和 SQL 的新手,所以我可能做错了什么并且看不到它——即使现在已经花了第二天的时间:
在我的 PostgreSQL 数据库中,我有两个表:
PieChartResult
+---------+---------+--------------+-------+----------+----------+----------------+
| id | answer | approvalrate | input | worktime | workerid | piecharthit_id |
+---------+---------+--------------+-------+----------+----------+----------------+
PieChartHit
+---------+-----------+
| id | truevalue |
+---------+-----------+
然后我在 pgAdmin 中编写以下 SQL 语句,效果很好:
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;
有人可以指导这个迷失的灵魂吗? :(
【问题讨论】:
-
我认为在我当前的项目中我做了同样的事情,如果您需要帮助,请告诉我。首先让我知道您是否能够运行简单的
SELECT *查询然后考虑复杂的查询。此外,在您的代码中,PieChartHit 中没有 PieChartResult 的引用基本上private List<PieChartResult> pieChartResult;必须是PieChartHit实体中代码的一部分我认为这个视频会有所帮助:youtube.com/… -
嗨。是的,'SELECT *' 语句工作正常。你知道如何打印查询“q”的所有结果吗?
-
使用 mappedBy 方法观看视频,然后尝试使用 session.save 插入记录。我想我会创建一个新的答案,并会告诉你 impl。如果你觉得有帮助,请投票给我的答案:)
标签: java sql hibernate persistence hql