2016-08-13 6 views
1

BEHOBEN: Jungs, wie @HatemJaber sagte, ich nur zu meinem preload hinzufügen fügt die Version = 0 und alles funktioniert jetzt gut. Die Version Spalte kann nicht Nullwert enthaltenSpringboot Daten Rest funktioniert nicht mit Super Klasse @MappedSuperclass

So wurde ich ein paar Tests mit springboot Daten Ruhe und alles zu tun, funktionierte gut, bis ich meine Entity Klasse wie folgt definieren:

Oberklasse:

@MappedSuperclass 
public abstract class BaseEntity implements Serializable { 
    @Id 
    @GeneratedValue 
    private Long id; 
    // getters and setters and others @PrePersit @PreUpdate 
} 

Held :

@Entity 
public class Hero extends BaseEntity { 
    // more boilerplate code ... 
} 

Find-Methode funktioniert:

{ 
    _embedded: { 
     heroes: [ 
     { 
      createAt: "2016-08-13T16:57:22.099+0000", 
      updateAt: null, 
      name: "Spiderman", 
      firstName: "Peter", 
      lastName: "Parker", 
      birthday: "1980-01-01T15:00:00.000+0000", 
    _links: { 
      self: { 
      href: "http://localhost:8080/rest/heroes/1" 
     }, 
     hero: { 
      href: "http://localhost:8080/rest/heroes/1" 
     } 
    } 
} 

Diese erhalten von id gibt leere Seite

http://localhost:8080/rest/heroes/1 

und throwns eine Nullpointer

java.lang.NullPointerException: null 
at org.springframework.data.rest.webmvc.support.ETag.getVersionInformation(ETag.java:192) ~[spring-data-rest-webmvc-2.5.2.RELEASE.jar:na] 
at org.springframework.data.rest.webmvc.support.ETag.from(ETag.java:76) ~[spring-data-rest-webmvc-2.5.2.RELEASE.jar:na] 
at org.springframework.data.rest.webmvc.HttpHeadersPreparer.prepareHeaders(HttpHeadersPreparer.java:64) ~[spring-data-rest-webmvc-2.5.2.RELEASE.jar:na] 
at org.springframework.data.rest.webmvc.RepositoryEntityController.getItemResource(RepositoryEntityController.java:352) ~[spring-data-rest-webmvc-2.5.2.RELEASE.jar:na] 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_102] 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_102] 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_102] 
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_102] 
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) ~[spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) ~[spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) [spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) [spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) [tomcat-embed-core-8.5.4.jar:8.5.4] 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) [spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) [tomcat-embed-core-8.5.4.jar:8.5.4]enter code here 

Ist das ein Fehler oder ich mache etwas falsch gemacht?

PS: nur um deutlich zu machen, alles funktioniert gut, wenn ich nicht die Super

+0

Die NPE beschwert sich über die Spalte "@ Version". Hast du das explizit definiert? – JudgingNotJudging

+0

Ja, ich habe eine @Version Integer-Version; Spalte auf meiner BaseEntity. Auch ich habe die Spalte auf der db create Tabelle HERO {... version integer ...} – Mike

+0

Nach neuen Tests bin ich mir ziemlich sicher über das Problem. Wenn Sie die Version von @Version Integer verwenden; auf Superklasse (BaseEntity) oder sogar auf Hero bekommst du diese NullPointerException. – Mike

Antwort

4

Ich werde einen Stich bei diesem und sagen, dass Sie möglicherweise eine Daten-SQL-Datei verwendet haben, um die Datenbank zu laden, und dass Sie kein version Feld enthalten?

Das war mein Problem, ich habe eine Suche und ersetzen, um version und einen Wert zu den INSERT-Anweisungen für die Testdaten, die ich vorab laden und alles funktioniert wie erwartet.

+0

Ich habe getestet, was Sie gesagt haben und funktioniert perfekt. Die Version darf in der Datenbank nicht null sein. Danke mann – Mike

1

Sieht aus wie Feder-data-Rest nicht gut funktioniert mit Entities mit @Version Anmerkung oder ich einige zusätzliche Konfiguration fehlt.

Sieht aus wie ein Fehler.

+0

Ja, mit Ihrer Hilfe :) Ich habe alle Datensätze mit der Version eq auf Null auf 0 aktualisiert. – Mike

Verwandte Themen