坑一:save方法执行后不入库
如果设置了<property name="connection.autocommit">true</property>
那么执行完save后,还要执行session.flush()或者提交事务才能提交。
如果设置<property name="connection.autocommit">false</property>
那么只有提交事务,才能提交到数据库。
坑二:merge方法
等同于根据主键的saveOrUpdate()方法。更新会全部字段更新,如果第二次数据不全,会造成第一次的数据丢失不全的部分。
坑三:hbm映射文件
映射文件中有的字段如果数据库表中没有,表中会加字段。hibernate.cfg.xml中将<property name="hbm2ddl.auto">update</property>的update改为none即可禁止。
坑四:hbm映射文件
<!-- <!-- <property name="hbm2ddl.auto">update</property> --> -->会报错。
<!-- -->中不能再有字符“--”,会报错。
坑五:连接失败报错
18/08/28 10:32:10 ERROR spi.SqlExceptionHelper: No operations allowed after connection closed. org.hibernate.exception.JDBCConnectionException: No operations allowed after connection closed. at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:67) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) at org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler.continueInvocation(ConnectionProxyHandler.java:146) at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
原因:如果连接闲置8小时 (8小时内没有进行数据库操作), mysql就会自动断开连接, 要重启tomcat;
或配置hibernate自动重连'autoReconnect=true'
解决方法:
<property name="connection.url">
jdbc:mysql://47.93.149.120:3306/bd_aidp_db?autoReconnect=true
</property>