2016-11-22 1 views
0

Ich versuche Spring Boot (Version 1.4.2) zu konfigurieren, um meine lokale MySQL-Datenbank zu verwenden, aber mit meiner Konfiguration stimmt etwas nicht. Könnten Sie sich bitte dieses sehr einfache Beispiel ansehen und mir sagen, was vor sich geht?Spring Boot lädt keine Entitäten aus der lokalen MySQL-Datenbank

Ich habe alle erforderlichen Abhängigkeiten Ort:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-data-jpa</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-web</artifactId> 
</dependency> 
<dependency> 
    <groupId>mysql</groupId> 
    <artifactId>mysql-connector-java</artifactId> 
</dependency> 

Meine Einheit:

@Entity 
@Table(name = "greetings") 
public class Greeting { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "greeting_id") 
    private long id; 

    @Column(name = "text") 
    private String text; 

    // getters and setters here 
} 

Repository:

@Repository 
public interface GreetingRepository extends JpaRepository<Greeting, Long> { 
} 

Controller:

@RestController 
@RequestMapping("/hello") 
public class GreetingsController { 

    @Autowired 
    private GreetingRepository repo; 

    @RequestMapping(method = RequestMethod.GET) 
    public Collection<Greeting> getGreetings() { 
     return repo.findAll(); 
    } 

    @RequestMapping(value = "/{id}", method = RequestMethod.GET) 
    public Greeting getGreeting(@PathVariable Long id) { 
     return repo.findOne(id); 
    } 
} 

application.properties:

spring.jpa.hibernate.ddl-auto=create-drop 
spring.jpa.properties.hibernate.globally_quoted_identifiers=true 

spring.datasource.url=jdbc:mysql://localhost/example 
spring.datasource.username=root 
spring.datasource.password=secret 
spring.datasource.driverClassName=com.mysql.jdbc.Driver 

Es ist eine MySQL-Datenbank auf localhost namens 'Beispiel' mit der folgenden Tabelle ausgeführt wird (und ein paar Platten, die ich dort eingefügt):

mysql> describe greetings; 
+-------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-------------+--------------+------+-----+---------+----------------+ 
| greeting_id | bigint(20) | NO | PRI | NULL | auto_increment | 
| text  | varchar(255) | YES |  | NULL |    | 
+-------------+--------------+------+-----+---------+----------------+ 
2 rows in set (0.00 sec) 

EDIT: Ich korrigierte meinen Controller und aktualisierte meine Frage. Das Problem ist, dass meine Anwendung In-Memory-Datenspeicher anstelle meiner MySQL-Datenbank verwendet. Wenn ich einen POST-Endpunkt erstelle und eine neue Entität in die Datenbank einfüge, kann ich sie abrufen, aber sie scheint sich von meiner bestehenden Datenbank zu unterscheiden, da ich keine Daten von dort erhalte.

EDIT2: gelöst durch spring.jpa.hibernate.ddl-auto=update

Antwort

1

ich mehrere Fehler auf Ihrem Code zu sehen bin. Die erste ist mit @RestController Annotation. Schauen Sie sich die doc an.

Der Wert, den Sie setzen ("/ Hallo") ist nicht das, was Sie erwarten ... Es ist nicht der Anforderungszuordnungshandlername wie in @RequestMapping Annotation. Statt dieser Verwendung:

Eigentlich denke ich, dass dies Ihr Problem lösen wird. Die zweite ist Vorschlag für id Feld - verwenden Sie Long Wrapper Typ anstelle von langen primitiven.

Zweitens ein Problem im Zusammenhang mit Ihren Daten ist die Eigenschaft: spring.jpa.hibernate.ddl-auto=create-drop Dies wird Ihr Schema am Ende der Sitzung fallen lassen. Verwenden Sie spring.jpa.hibernate.ddl-auto=update

+0

True, ich hatte diese Fehler drin. Jetzt bekomme ich keine Ausnahmen, aber es lädt überhaupt keine Daten. Gibt nur leere Mengen zurück, obwohl die Datenbank gefüllt ist. – Smajl

+0

Stimmen Sie vollständig mit dem primitiven Wrapper-Objekt für die ID überein. Primitive sollten vermieden werden, siehe hier für eine Erklärung: http://stackoverflow.com/questions/3535791/primitive-or-wrapper-for-hibernate-primary-keys –

+1

Das war der Fehler! Danke, dass du dir die Zeit nimmst und diese grundlegenden Dinge erklärst. Es ist schwierig, den Fehler auf den ersten Blick zu erkennen. – Smajl

Verwandte Themen