2017-05-28 1 views
0

Ich habe mehrere Klassen im selben Projekt, in denen die ID immer automatisch generiert wird. In diesem speziellen Fall ist der Wert meiner ID jedoch immer Null. Ich frage mich wirklich was falsch ist, denn nach einigen Änderungen hat es aufgehört zu arbeiten. Und verglichen mit den anderen Klassen scheint der Code derselbe zu sein.Java JPA GenerationType.Auto Wert immer Null

package com.checkin.model.entity; 
import javax.persistence.*; 


@Entity 
public class Checkin { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long id; 

@Column(nullable = false) 
private String date; 

public Checkin(){ 

} 

public Checkin(String date){ 
    this.date = date; 
    System.out.println(this.id); 
    System.out.println(this.getId()); 
} 


public Long getId() {return id;} 

public void setId(Long id) {this.id = id;} 

public String getDate() {return date;} 

public void setDate(String date) {this.date = date;} 

} 

Dies ist das Repository, in dem die Objekte gespeichert werden:

package com.checkin.model.repository; 

import com.checkin.model.entity.Checkin; 
import org.springframework.data.repository.CrudRepository; 
import org.springframework.stereotype.Repository; 

@Repository("checkinRepository") 
public interface CheckinRepository extends CrudRepository<Checkin, Long> { 
    Checkin findById(Long id); 


} 

und schließlich ist dies das Ergebnis, das ich von Postman bekommen

enter image description here

+0

was die zugrunde liegende Datenbank? und zeigen Sie die DDL-Definition der ID-Spalte –

+0

Ich bin nicht sicher, was Sie mit DDL-Definition meinen. Ich verwende Hibernate mit JPA. Und in Bezug auf Ihre Frage zu der zugrunde liegenden Datenbank, hier ist, was ich in meinem build.gradle verwendet habe: compile ("org.springframework.boot: spring-boot-starter-data-jpa") kompilieren ("com.h2database: h2 ") –

+0

@AntonioDelaTorre Setup Hibernate, um Datenbanktabellen (und verlorene Informationen) neu zu erstellen und das SQL-Protokoll zu aktivieren. Sie werden 'DDL' im Protokoll haben (SQL' CREATE TABLE' Anweisungen). Andere Möglichkeit DDL zu generieren: https://geowarin.github.io/generate-ddl-with-hibernate.html. Es ist ein bisschen komplexer. –

Antwort

0

Der Typ-Generation AUTO die Sätze die zugrunde liegende Datenbank zur Generierung der ID http://docs.oracle.com/javaee/6/api/javax/persistence/GenerationType.html#AUTO

In diesem Fall möchten Sie prüfen, ob die ID-Spalte der H2-Datenbank über das Attribut zum Generieren von IDs verfügt. Ich vermute es nicht. Ich benutze nicht viel AUTO selbst, also nehme ich an, wenn Ihr Auto für andere Entities arbeitet, dann sind diese richtig eingerichtet.

Möglicherweise müssen Sie eine der folgenden Funktionen ausführen:

  • Migration hier
  • Update Spalte in H2
  • erstellen Sie die Tabelle
+0

Danke für Ihre Antwort! Ich folge diesem Tutorial: https://spring.io/guides/gs/accessing-data-jpa/ Aber ich glaube nicht, dass das Problem von h2 oder mit etwas aus der JPA ist. Weil, wenn ich erstellen und Objekt und in die Datenbank im Inneren der Application.java genannten Weise speichern, unter Verwendung von: public CommandLineRunner Demo (CheckinRepository Repository) { \t \t return (args) -> { \t \t \t // speichern Sie ein paar Kunden \t \t \t repository.save (neues Einchecken ("Jack")); Ich bekomme: 2017-05-29 16: 50: 09.035 INFO 33570 --- [main] com.checkin.Application: Checkin: [ID = 1, Datum = 'Jack'] –

+0

Also ich denke, es hat etwas damit zu tun die RESTful Schnittstelle –

+0

Vielen Dank !! Ich löste das Problem ... Es war eines der dümmsten Dinge, die man sich vorstellen konnte ... Ich habe das .save in der Datenbank kommentiert und natürlich, wenn die Datenbank das Objekt nicht empfängt, erzeugt es keine ID ... –