我正在尝试使用Hibernate连接MySQL数据库,同时创建small Micronaut POC。但我无法创建连接,并且未创建架构/实体。
请帮帮我,我被困在这里了
我已经经历了
http://guides.micronaut.io/micronaut-data-access-jpa-hibernate/guide/index.html
但是没用的
以下是我的代码:
build.gradle文件依赖关系
dependencies {
compile "io.micronaut:micronaut-http-server-netty"
compile "io.micronaut.configuration:micronaut-hibernate-jpa"
annotationProcessor platform("io.micronaut:micronaut-bom:$micronautVersion")
annotationProcessor "io.micronaut:micronaut-inject-java"
annotationProcessor "io.micronaut:micronaut-validation"
annotationProcessor "io.micronaut.configuration:micronaut-openapi"
annotationProcessor "io.micronaut.data:micronaut-data-processor"
implementation platform("io.micronaut:micronaut-bom:$micronautVersion")
implementation "io.micronaut:micronaut-inject"
implementation "io.micronaut:micronaut-validation"
implementation "io.micronaut:micronaut-runtime"
implementation "io.micronaut.configuration:micronaut-jdbc-tomcat"
implementation "io.swagger.core.v3:swagger-annotations"
implementation "io.micronaut:micronaut-http-client"
implementation "io.micronaut.configuration:micronaut-hibernate-jpa" // <1>
implementation "io.micronaut.configuration:micronaut-jdbc-hikari" // <2>
implementation "io.micronaut:micronaut-http-server-netty"
implementation "io.micronaut.data:micronaut-data-hibernate-jpa"
implementation "javax.annotation:javax.annotation-api"
testAnnotationProcessor platform("io.micronaut:micronaut-bom:$micronautVersion")
testAnnotationProcessor "io.micronaut:micronaut-inject-java"
testImplementation platform("io.micronaut:micronaut-bom:$micronautVersion")
testImplementation "org.junit.jupiter:junit-jupiter-api"
testImplementation "io.micronaut.test:micronaut-test-junit5"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine"
runtimeOnly "ch.qos.logback:logback-classic:1.2.3"
compile group: 'mysql', name: 'mysql-connector-java', version:'8.0.13'}application.yml文件:
micronaut:
application:
name: demoapp
server:
port: 8081
datasources:
default:
url: dbc:mysql://localhost:3306/Micronaut
username: root
password: password
driverClassName: "com.mysql.cj.jdbc.Driver"
dialect: MYSQL
jpa:
default:
packages-to-scan: "demoapp.entity"
properties:
hibernate:
hbm2ddl:
auto: update
show_sql: true控制器
@Controller("/hello")
public class HelloController {
private GenreRepo genreRepo;
@Post(value = "/save")
public String saveGenre() {
Genre entity = new Genre();
entity.setId(Long.valueOf(10));
entity.setName("dempApp");
System.out.println("entity::"+ entity.getId());
genreRepo.save(entity);
return "save entity success" ;
}
}实体:
@Entity
@Table(name = "genre")
public class Genre {
public Genre() {}
public Genre(@NotNull String name) {
this.name = name;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
@Column(name = "name", nullable = false, unique = true)
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} }错误:
13:33:01.881 [pool-1-thread-3] ERROR i.m.h.s.netty.RoutingInBoundHandler - Unexpected error occurred: null
java.lang.NullPointerException: null
at demoapp.controller.HelloController.saveGenre(HelloController.java:50)
at demoapp.controller.$HelloControllerDefinition$$exec4.invokeInternal(Unknown Source)
at io.micronaut.context.AbstractExecutableMethod.invoke(AbstractExecutableMethod.java:146)
at io.micronaut.context.DefaultBeanContext$BeanExecutionHandle.invoke(DefaultBeanContext.java:3016)
at io.micronaut.web.router.AbstractRouteMatch.execute(AbstractRouteMatch.java:228)
at io.micronaut.web.router.RouteMatch.execute(RouteMatch.java:122)
at io.micronaut.http.server.netty.RoutingInBoundHandler.lambda$buildResultEmitter$16(RoutingInBoundHandler.java:1460)
at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java:71)
at io.reactivex.Flowable.subscribe(Flowable.java:14935)
at io.reactivex.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:37)
at io.reactivex.Flowable.subscribe(Flowable.java:14935)
at io.reactivex.internal.operators.flowable.FlowableSwitchIfEmpty.subscribeActual(FlowableSwitchIfEmpty.java:32)
at io.reactivex.Flowable.subscribe(Flowable.java:14935)
at io.reactivex.Flowable.subscribe(Flowable.java:14882)
at io.micronaut.http.server.context.ServerRequestContextFilter$1.subscribe(ServerRequestContextFilter.java:66)
at io.reactivex.internal.operators.flowable.FlowableFromPublisher.subscribeActual(FlowableFromPublisher.java:29)
at io.reactivex.Flowable.subscribe(Flowable.java:14935)
at io.reactivex.Flowable.subscribe(Flowable.java:14882)
at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82)
at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker$BooleanRunnable.run(ExecutorScheduler.java:288)
at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker.run(ExecutorScheduler.java:253)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:830)发布于 2020-06-19 15:55:23
在您的例子中,这是依赖注入的问题。
添加初始化genreRepo字段的构造函数:
@Controller("/hello")
public class HelloController {
private final GenreRepo genreRepo;
public HelloController(final GenreRepo genreRepo) {
this.genreRepo = genreRepo;
}
...
}或使用@Inject注释该字段
@Controller("/hello")
public class HelloController {
@Inject
GenreRepo genreRepo;
...
}然后,Micronaut会自动将GenreRepo实例注入你的控制器。
发布于 2021-01-15 17:39:56
在您的application.yml中,url中缺少'j‘:
micronaut:
application:
name: demoapp
server:
port: 8081
datasources:
default:
url: jdbc:mysql://localhost:3306/Micronaut
username: root
password: password
driverClassName: "com.mysql.cj.jdbc.Driver"
dialect: MYSQL
jpa:
default:
packages-to-scan: "demoapp.entity"
properties:
hibernate:
hbm2ddl:
auto: update
show_sql: truehttps://stackoverflow.com/questions/62463949
复制相似问题