我使用hibernate和hql在我的Java代碼中查詢。但我得到了這樣一個例外:當使用Transformer時Hibernate異常PropertyNotFoundException
Caused by: org.hibernate.PropertyNotFoundException: Could not find setter for 0 on class [my class]
at org.hibernate.property.ChainedPropertyAccessor.getSetter(ChainedPropertyAccessor.java:44)
我不明白「0」是什麼意思。這裏有一些與例子deatils:
我有幾個表加入hql。該表是這樣的:
A
- A_ID
- NAME
B
- B_ID
- A_ID
C
- C_ID
- B_ID
- LENGTH
- UNIT
類:
@Entity
@Table(name="A")
class A
{
@Id
@Column(name="A_ID", updatable=false)
private Long id;
@Column(name="NAME", nullable=false, length=10, updatable=false)
private String name;
@OneToMany(mappedBy="a", fetch=FetchType.LAZY, cascade={CascadeType.ALL})
@JoinColumn(name="A_ID", nullable=false)
private Set<B> bs;
@Transient
private Double length;
@Transient
private String unit;
// Setters and getters
...
}
@Entity
@Table(name="B")
class B
{
@Id
@Column(name="B_ID", updatable=false)
private Long id;
@ManyToOne
@JoinColumn(name="A_ID", nullable=false, insertable=true, updatable=false)
private A a;
@OneToMany(mappedBy="b", fetch=FetchType.LAZY, cascade={CascadeType.ALL})
@JoinColumn(name="B_ID", nullable=false)
private Set<C> cs;
// Setters and getters
...
}
@Entity
@Table(name="C")
class C
{
@Id
@Column(name="C_ID", updatable=false)
private Long id;
@ManyToOne
@JoinColumn(name="B_ID", nullable=false, insertable=true, updatable=false)
private B b;
@Column(name="LENGTH", nullable=false, updatable=false)
private Double length;
@Column(name="UNIT", nullable=false, length=10, updatable=false)
private String unit;
// Setters and getters
...
}
HQL:
select a, sum(c.length) as length, min(c.unit) as unit
from A a
left outer join a.b as b
left outer join b.c as c
group by
a.id
a.name
查詢:
Query query = session.createQuery(hql.toString()).setResultTransformer(Transformers.aliasToBean(A.class));
結果是對象 「A」 的名單收集長度和單位。我不明白爲什麼我得到這個例外。請給一些建議。
更新:
我寫了使用ResultTransformer和輸出所有的 「別名」,看問題:
-> 0
-> length
-> unit
看來它對待 「A」 除了與長度和單位。我的HQL應該有一些問題?
沒有setter和表的吸氣申請 –
對不起,我對類的getter和setter。我忘了將它們添加到示例中。所以我認爲他們不是原因。另外2個問題:1.爲什麼異常是「0」? 2.吸氣劑對此有影響嗎? – Xiezi
檢查表fileds和pojo的字段是一樣的嗎? –