yarine 2011-04-08 00:45
浏览 395
已采纳

Hibernate hbm2ddl.auto中参数update不明白

如题,刚学hibernate 不是很明白这个参数到底什么作用,网上查资料说是会改变表结构。

可是我写小例子,却是会报错。
例子就不放上来了,大概是:

实体类和Hibernate Mapping XML文件比数据库中多了一列,然后hibernate.cfg.xml配置文件中hbm2ddl.auto的值为update

但是运行后却会报错,报错代码大概是:
Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:366)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
at test.StudentTest.main(StudentTest.java:35)
Caused by: java.sql.BatchUpdateException: Unknown column 'title' in 'field list'
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1093)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:851)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 8 more

刚刚做了另外一个值的测试,发现create-drop也不像文档上描述的那样:执行完成后会删除。我执行完了之后发现数据库里刚建的表,并没有被删除。

  • 写回答

1条回答 默认 最新

  • kyelxy8401 2011-04-08 09:41
    关注

    Hibernate hbm2ddl.auto,这个标签是用来基于你配置好了实体间的关系,然后可以自动生成表的。
    软件的设计可以分两个方向,一时面向数据库的设计,而是面向流程的设计。
    而hiberante是面向流程的设计,你把对象关系都配完了之后,也就表示表结构出来了。
    有些是先创建表,在创建流程。
    具体的Hibernate hbm2ddl.auto=“update”,第一次执行,会自动的根据关联关系,创建表。当第二次的时候,判断实体间的关系变了没有,或者参数变了没有,如果变了就更行表结构,如果没有就不管。还有其他的一些值,create-drop,是创建之后删除等操作。
    建议加上true,这样可以查看一下执行sql

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办