Caused by: java.lang.IllegalArgumentException: Repository interface must not be null on initialization!
at org.springframework.util.Assert.notNull(Assert.java:115)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:263)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:213)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:50)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:168)
... 226 more
2020-03-06 20:52:29.447 [DubboShutdownHook] INFO c.a.d.c.AbstractConfig - [DUBBO] Run shutdown hook now., dubbo version: 2.5.3, current host: 127.0.0.1
2020-03-06 20:52:29.449 [DubboShutdownHook] INFO c.a.d.r.s.AbstractRegistryFactory - [DUBBO] Close all registries [], dubbo version: 2.5.3, current
spring.jpa.properties.hibernate.hbm2ddl.auto=none
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=none
spring.jackson.serialization.indent-output=true
在我们的项目中是 springBoot 、dubbo 、jpa 整合的。
原因和解决:
图中红框中位置 ,自动建表设置最初是 create , 后来我改为了 update,但事实上只有数据库为空库的时候才用建表。
第一次建表成功后 ,就应该改为 none 。
改为 none 之后就能正常启动工程了。
jpa:
hibernate:
ddl-auto 的几个常用属性值:
none:默认值,什么都不做,每次启动项目,不会对数据库进行任何验证和操作
create:每次运行项目,没有表会新建表,如果表内有数据会被清空
create-drop:每次程序结束的时候会清空表
update:每次运行程序,没有表会新建表,但是表内有数据不会被清空,只会更新表结构。
validate:运行程序会校验数据与数据库的字段类型是否相同,不同会报错
实际项目中 update 用的多一点,因为它只更新对象关系的变化,不会清空数据或者重建表。
需要注意的是,如果你不打算在设计表的时候强制加表级别的外键关系约束,就自己手动建表,然后不设置 jpa.hibernate.ddl-auto 或者设置它的值为 none。
因为使用 update 更新表,每次启动 @OneToOne、@OneToMany 等注解会检查表的外键关系,然后强制建立表外键约束,这个很烦人。
参考: