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 updateat 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也不像文档上描述的那样:执行完成后会删除。我执行完了之后发现数据库里刚建的表,并没有被删除。 问题补充:kyelxy 写道

解决方案

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

时间: 2024-10-12 04:35:41

Hibernate hbm2ddl.auto中参数update不明白的相关文章

hibenate.hbm2ddl.auto属性详解

    hibernate配置属性中,hibernate.hbm2ddl.auto可以帮助你实现正向工程,即由java代码生成数据库脚本,进而生成具体的表结构.     在hibernate.cfg.xml中:  Java代码   <property name="hibernate.hbm2ddl.auto">   </property>   它包含4个属性:  create : 会根据你的model类来生成表,但是每次运行都会删除上一次的表,重新生成表,哪怕2

我在hibernate.cfg.xml中配置两个mapping resource会提示页面会提示错误,配置一个就没问题,请各位大神帮忙

问题描述 <hibernate-configuration><session-factory><propertyname="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><propertyname="connection.url">jdbc:oracle:thin:@localhost:1521:oorcl</pr

hibernate spring-hbm2ddl.auto 自动创建表

问题描述 hbm2ddl.auto 自动创建表 hbm2ddl.auto=update 时,实体类采用注解方式, @Id @GeneratedValue(generator="paymentableGenerator") @GenericGenerator(name="paymentableGenerator",strategy="uuid") private String id; @Column(name="C_NAME",

关于C语言中参数的传值问题_C 语言

1. 考题一:程序代码如下: 复制代码 代码如下: void Exchg1(int x, int y)  {   int tmp;   tmp=x;   x=y;   y=tmp;   printf("x=%d,y=%d/n",x,y) } void main() {   int a=4,b=6;   Exchg1 (a,b) ;   printf("a=%d,b=%d/n",a,b) } 输出的结果: x=____, y=____ a=____, b=____ 问

Python中参数多个值的表示法

今天在写Python脚本时,调用了数据管理-制图综合-融合工具,在ArcGIS里操作的参数设置如下: 如果融合字段只有一个那好办,如果融合字段有多个我该怎么表达,查看帮助文档中的示例代码明白了: 所以,我这里获取所有字段,剔除不需要的FID.OBJECTID.SHAPE.HAPE_LENGTH和SHAPE_AREA等,用字符串操作函数得到:["NAME","CODE"] 这样输入应该没有问题的,哪知居然报错,说找不到["NAME","C

汇编中参数的传递和堆栈修正

在 Win32汇编中,我们经常要和 Api 打交道,另外也会常常使用自己编制的类似于 Api 的带参数的子程序,本文要讲述的是在子程序调用的过程中进行参数传递的概念和分析.一般在程序中,参数的传递是通过堆栈进行的,也就是说,调用者把要传递给子程序(或者被调用者)的参数压入堆栈,子程序在堆栈取出相应的值再使用,比如说,如果你要调用 SubRouting(Var1,Var2,Var3),编译后的最终代码可能是 push Var3push Var2push Var1call SubRoutingadd

jquery获取URL中参数解决中文乱码问题的两种方法

 从A页面通过url传参到B页面时,获取URL中参数出现中文乱码问题,解析url参数的正确方法如下,感兴趣的朋友可以参考下 从A页面通过url传参到B页面时,解析url参数可以用下面两种方法:  方法一:正则分析法  代码如下: function getQueryString(name) {  var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");  var

如何在win7系统中查看Update更新历史记录

  最近,小编有一个朋友的电脑出现了比较严重的故障,不管安装什么软件,都会出现不兼容的情况,拿去问了很多的人,都表示不知道什么原因引起的,直到最后,问到了专卖店,才发现原来是系统中update更新的一些补丁有问题,这才造成了众多不兼容情况的出现,那么怎么办呢?当然,只有将该补丁卸载掉了,今天我们就要来讲讲,如何在win7 32位系统电脑中查看Update的更新历史记录. 1.首先,咱们点击开始菜单,然后进入到控制面板的界面中. 2,在控制面板中,点击进入到系统和安全界面,然后点击进入到操作中心.

Access-Control-Allow-Headers 跨域请求中参数的意义?

问题描述 Access-Control-Allow-Headers 跨域请求中参数的意义? response.addHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With"); Access-