【发布时间】:2015-02-07 13:57:54
【问题描述】:
我有一个名为 Student 的表格,如下所示
ID NAME DOB
--- ---- ---------
1 A 2009-01-28
2 B 2001-05-20
我正在使用派生属性从 hbm 文件中的 dob 获取 AGE,如下所示
<hibernate-mapping>
<class name="com.arat.derived.Person" table="person" catalog="spring_db">
<id name="id" type="int">
<column name="id" />
<generator class="assigned" />
</id>
<property name="name" type="string">
<column name="name" />
</property>
<property name="dob" type="date">
<column name="dob" length="0" />
</property>
<property name="age" type="integer" column="AGE"
formula="( select TIMESTAMPDIFF(YEAR,p.dob,NOW()) as AGE
from person p where p.ID=ID)"></property>
</class>
</hibernate-mapping>
我的 POJO 类 Student 具有所有属性 id、name、dob 和 age 以及 setter 和 getter 方法。
使用 load 或 get 方法获取数据时出现错误
private static void loadPerson() {
Session session = factory.openSession();
Person person = (Person) session.get(Person.class, 0);
System.out.println("Person : name " + person.getName()
+ ", dob: " + person.getDob() + ", age : " + person.getAge());
}
Hibernate: 选择 person0_.id 作为 id1_8_0_, person0_.name 作为 name2_8_0_, person0_.dob 作为 dob3_8_0_, ( select TIMESTAMPDIFF(person0_.YEAR,p.dob,NOW()) as person0_.AGE from person p where p. ID=person0_.ID) as formula0_0_ from spring_db.person person0_ where person0_.id=? 2015 年 2 月 7 日晚上 7:20:22 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 警告:SQL 错误:1064,SQLState:42000 2015 年 2 月 7 日晚上 7:20:22 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行使用 'person0_.YEAR,p.dob,NOW()) as person0_.AGE from person p where p.ID=person0_.ID)' 附近的正确语法 2015 年 2 月 7 日晚上 7:20:22 org.hibernate.event.internal.DefaultLoadEventListener onLoad 信息:HHH000327:执行加载命令时出错:org.hibernate.exception.SQLGrammarException:无法提取 ResultSe**
你能告诉我哪里错了吗?
【问题讨论】:
标签: hibernate nhibernate-mapping derived