hibernate不自动建表及报错信息记录
2016-01-31 20:42
375 查看
使用的jar及代码如下:
<dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> </dependency>
@GeneratedValue @Column(name = "id", length = 22) private String id;
报错信息:
Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index; at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:973) at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:824)
有人说是Hibernate4.3的一个bug 将Table(name="t_user")改为这个@Entity(name="t_user")就不报错了.参考:http://blog.csdn.net/chaoowang/article/details/21233347
按上面的试验之后还是不能自动建表
随后,将
<dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> </dependency>
改为
<dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.1-api</artifactId> <version>1.0.0.Final</version> </dependency>
后再试,保存时报错为:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'school.t_foo' doesn't exist at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
为什么一直没有创建表呢,自己创建一个表试试,
此时报错信息变为了:
Caused by: java.sql.SQLException: Field 'id' doesn't have a default value at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551)
折腾了一会儿突然想到,Hibernate配置为@GeneratedValue时采用的是默认策略,生成的主键类型是Integer而不是String.
然后将String改为了Integer类型可以正常生成表了.
接下来改为UUID生成策略后主键改回String,一切终于正常了.
总结一下:
1.hibernate对于mysql生成主键的策略是Interger类型,如果主键的类型不匹配则不会自动建表.
2.javax.persistence:persistence-api对于hibernate生成主键不支持,需要修改为hibernate-jpa-2.1-api
相关文章推荐
- Hibernate Oracle sequence的使用技巧
- jsp Hibernate批量更新和批量删除处理代码
- jsp hibernate的分页代码第1/3页
- JAVA+Hibernate 无限级分类
- SSH整合中 hibernate托管给Spring得到SessionFactory
- jsp hibernate 数据保存操作的原理
- hibernate中的增删改查实现代码
- 解决hibernate+mysql写入数据库乱码
- java优化hibernate性能的几点建议
- java Hibernate延迟加载
- hibernate 常用方法介绍
- 详解Java的Hibernate框架中的注解与缓存
- 浅析Java的Hibernate框架中的继承关系设计
- JQuery+Ajax+Struts2+Hibernate框架整合实现完整的登录注册
- 深入理解Hibernate中的flush机制
- 简要分析Java的Hibernate框架中的自定义类型
- 简单的手工hibernate程序示例
- 详解Java的Hibernate框架中的Interceptor和Collection
- 详解Java的Hibernate框架中的缓存与二级缓存
- MyBatis与Hibernate的比较