关于postgresql与hibernate的应用出现错误的解决方案Postgredql 8.0 无法生成sequence主键

When connecting to my webapp, I receive the following error message: Bad SQL grammar [] in task 'Hibernate operation'; nested exception is org.postgresql.util.PSQLException: ERROR: relation "hibernate_sequence" does not exist

The hbm.xml file:
<hibernate-mapping auto-import="true">

<class name="org.myspring.Person" table="T_Person">
<id name="id" column="id" unsaved-value="-1">
<generator class="sequence"/>
</id>
<property name="firstName" column="firstName"/>
<property name="lastName" column="lastName"/>
</class>

</hibernate-mapping>

Database:

CREATE TABLE "T_Person"
(
id varchar(10) NOT NULL,
"firstName" varchar(20),
"lastName" varchar(30) NOT NULL,
CONSTRAINT "PK_T_Person" PRIMARY KEY (id)
)
WITHOUT OIDS;

Stacktrace:
org.springframework.jdbc.BadSqlGrammarException: Bad SQL grammar [] in task 'Hibernate operation'; nested exception is org.postgresql.util.PSQLException: ERROR: relation "hibernate_sequence" does not exist org.postgresql.util.PSQLException: ERROR: relation "hibernate_sequence" does not exist at org.postgresql.util.PSQLException.parseServerError (PSQLException.java:139) at org.postgresql.core.QueryExecutor.executeV3(QueryE xecutor.java:152) at org.postgresql.core.QueryExecutor.execute(QueryExe cutor.java:100) at org.postgresql.core.QueryExecutor.execute(QueryExe cutor.java:43) at org.postgresql.jdbc1.AbstractJdbc1Statement.execut e(AbstractJdbc1Statement.java:517) at org.postgresql.jdbc2.AbstractJdbc2Statement.execut e(AbstractJdbc2Statement.java:50) at org.postgresql.jdbc1.AbstractJdbc1Statement.execut eQuery(AbstractJdbc1Statement.java:233) at net.sf.hibernate.id.SequenceGenerator.generate(Seq uenceGenerator.java:69) at net.sf.hibernate.impl.SessionImpl.saveWithGenerate dIdentifier(SessionImpl.java:765) at net.sf.hibernate.impl.SessionImpl.save(SessionImpl .java:738) at net.sf.hibernate.impl.SessionImpl.saveOrUpdate(Ses sionImpl.java:1388) at org.springframework.orm.hibernate.HibernateTemplat e$13.doInHibernate(HibernateTemplate.java:320) at org.springframework.orm.hibernate.HibernateTemplat e.execute(HibernateTemplate.java:176) at org.springframework.orm.hibernate.HibernateTemplat e.saveOrUpdate(HibernateTemplate.java:317) at
...

Questions:
How can I verify the sql statements that have been generated automagically?
Should I add a hibernate_sequence relation in my database? If yes, how do I define this relation?
answer:
Hibernate sequence generator for postgresql takes a parameter that is the sequence name:

<generator class="sequence">
<param name="sequence">sequence_name</param>
</generator>

by default, Hibernate uses hibernate_sequence. You can create it using:

create sequence hibernate_sequence;


How can I verify the sql statements that have been generated automagically?

Add the following line to your LocalSessionFactoryBean definition in applicationContext:

<prop key="hibernate.show_sql">true</prop>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值