[英]Spring data repository is not working
Application.java 应用程序
package com.example;
import com.example.repository.AuthorRepository;
import com.example.entities.Author;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.transaction.annotation.Transactional;
@SpringBootApplication
public class JpaHibernateApplication {
@Autowired
private static AuthorRepository authorRepository;
@Transactional
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(JpaHibernateApplication.class, args);
for(String name : ctx.getBeanDefinitionNames()){
System.out.println(name);
}
Author author = new Author();
author.setName("Vamsi");
authorRepository.save(author);
}
}
Author.java 作者.java
package com.example.entities;
import javax.persistence.*;
@Entity
@Table(name="author")
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
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;
}
}
AuthorRepository 作者资料库
package com.example.repository;
import com.example.entities.Author;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface AuthorRepository extends CrudRepository<Author,Long> {
}
application.properties application.properties
spring.datasource.url = jdbc:mysql://localhost:3306/Learning?useSSL=false
spring.datasource.username = root
spring.datasource.password = root
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# Use spring.jpa.properties.* for Hibernate native properties (the prefix is
# stripped before adding them to the entity manager)
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
gradle File gradle文件
buildscript {
ext {
springBootVersion = '1.3.3.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'spring-boot'
jar {
baseName = 'demo'
version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.7
targetCompatibility = 1.7
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-web')
runtime('mysql:mysql-connector-java')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
eclipse {
classpath {
containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7'
}
}
task wrapper(type: Wrapper) {
gradleVersion = '2.12'
}
I am trying to persist Author Object during the start of application. 我正在尝试在应用程序启动期间保留Author Object。 But it is giving the following null pointer exception.
但是它给出了以下空指针异常。
Error 错误
Exception in thread "main" java.lang.NullPointerException
at com.example.JpaHibernateApplication.main(JpaHibernateApplication.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Autowiring in static fields doesn't work. 在静态字段中自动布线不起作用。 Remove the static keyword from your
authorRepository
field. 从您的
authorRepository
字段中删除static关键字。 Also, if you want to execute any code after startup of your Spring Boot application, create a bean which implements the interface CommandLineRunner
or ApplicationRunner
. 另外,如果要在启动Spring Boot应用程序后执行任何代码,请创建一个实现接口
CommandLineRunner
或ApplicationRunner
的bean。 Those beans will be executed after your application is started. 这些Bean将在您的应用程序启动后执行。
是的,如果您使用静态,则它无法注入该bean,这就是为什么您得到NullPointerException的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.