hibernate不自动建表及报错信息记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lk_blog/article/details/50615889
使用的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

猜你喜欢

转载自blog.csdn.net/lk_blog/article/details/50615889