2016-04-30 8 views
0

Application.javaFrühling Daten-Repository arbeitet nicht

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

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

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 Datei

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' 
} 

Ich versuche Autor Objekt beim Start der Anwendung bestehen bleiben. Aber es gibt die folgende Nullzeigerausnahme.

Fehler

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) 

Antwort

2

autowiring in statischen Feldern funktioniert nicht. Entfernen Sie das statische Schlüsselwort aus Ihrem Feld authorRepository. Wenn Sie nach dem Start Ihrer Spring Boot-Anwendung Code ausführen möchten, erstellen Sie außerdem eine Bean, die die Schnittstelle CommandLineRunner oder ApplicationRunner implementiert. Diese Beans werden ausgeführt, nachdem Ihre Anwendung gestartet wurde.

-1

ja, wenn Sie statische verwenden, dann ist es nicht in der Lage, diese Bohne zu injizieren, deshalb haben Sie NullPointerException.