我正在使用hibernate和hql在Java代码中进行查询。但是我有这样一个例外:
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”的含义。以下是一些带有示例的细节:
我有几个表加入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应该有问题吗?
发现问题:
即使HQL可以正确转换为sql,但是当ResultTransformer获取结果时,结果中将只有3个字段:
1. A
2. length
3. unit
无论A中有多少个字段,它们都将被汇总到单个字段“ A”中,并且由于我没有对此字段设置任何别名,因此它将被视为“字段0”。
因此,在我像这样更改HQL之后,问题解决了:
html" target="_blank">select a.id as id, a.name as name, 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
问题内容: 我有一个“复杂”的问题。 我正在使用Hibernate / JPA与数据库进行事务。 我不是DBA,客户端使用了我的应用程序,即RESTful Web服务。我的问题是数据库已更改(不是很频繁,但仍在更改)。另外,客户端并不总是尊重我的应用程序的输入(长度,类型等)。发生这种情况时,Hibernate会引发异常。异常很难翻译和从日志中读取,因为它具有嵌套的异常并且由很多文本组成:就像我说
问题内容: 我在注释和上遇到了问题。在Hibernate中运行代码时,我得到: 引起原因:org.hibernate.PropertyAccessException:无法通过com.test.entities.EmployeeId.serverId的反射设置器设置字段值 但是,让我们从头开始…我有一个实体的复合主键,它由指向其他两个实体(和)的外键组成。为了设计简洁,我在Employee实体中使用
问题内容: 从Weblogic 11c切换到Weblogic 12c后,出现此异常: 我发现了有关该主题的其他问题,但是所有解决方案都是关于错误的库的(Vaadin 7-Bean Validation )。我认为我的hibernate-validator与bean验证器库匹配。这是我在WEB-INF / lib中拥有的: 可能是由其他依赖性引起的吗? 编辑 我目前在我的weblogic-appli
问题内容: 这分别是我的hbm和测试代码。我正在使用Spring的HibernateTemplate。我不使用DAO。使用Spring 2.0.7的Hibernate 2.2.5 血红蛋白 测试 超级测试班 错误 问题答案: 好的,根本原因是我对集合的映射无效。感谢这篇关于复合映射的文章 错误: 正确 完整的映射
问题内容: 尝试将结果集强制转换为映射类时,我收到了hibernate类的类强制转换异常…我能够查看返回的结果集中的数据…但是它以Object []的形式返回我可以将Object []设置为List …我可以正确地进行hibernate映射吗?我从查询中获取了正确的数据,但映射不正确… 映射 映射类 参加班 主要 问题答案: 对于测试,我建议您在产生类强制转换异常的语句周围放置一个try-catc
问题内容: 当我执行以下代码时,发生异常: 这是我的代码: 这种行为的原因是什么? 问题答案: 这是一个有点费解,究竟是什么您正在执行的查询,但如果你需要使用冒号在本地查询,你的情况为“赋值”操作符,你应该逃避所有的结肠occurances 在您的带有查询的Java字符串,因此可能类似于: 更新: 似乎,尚无法在Hibernate本机查询中转义冒号,这是一个未解决的问题。这意味着,您不能在Hibe