2016-05-12 3 views
0

Ich habe ein Projekt in Spring-Boot. Sorry für schlechte Englisch Jungs. Also, Problem ist: wenn ich mein Projekt von "BootRun", 2 von 3 Tabellen nur in meiner Postgresql-Datenbank erstellt. Sie sind "Rolle" und "user_role". Und der Hibernate gibt eine Nachricht zurück, wenn er versucht, die dritte Tabelle "user" zu erstellen. Dies ist die Botschaft: enter image description hereWarum Tabelle Benutzer nicht erstellt? Ich bekomme diese msg "Nicht erfolgreich: create table user"

dies user.java Code

import com.fasterxml.jackson.annotation.JsonIgnore; 
import org.hibernate.validator.constraints.NotEmpty; 

import javax.persistence.*; 
import java.util.HashSet; 
import java.util.Set; 

@Entity 
public class User { 

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

    @NotEmpty 
    private String name; 

    @NotEmpty 
    @Column(unique = true, nullable = false) 
    private String login; 

    @NotEmpty 
    private String password; 

    @JsonIgnore 
    @ManyToMany(fetch = FetchType.EAGER) 
    @JoinTable(name = "user_role", joinColumns = {@JoinColumn(name = "user_id")}, inverseJoinColumns = {@JoinColumn(name = "role_id")}) 
    private Set<Role> roles = new HashSet<Role>(); 

    public User() { 
    } 

    public User(User user) { 
     super(); 
     this.id = user.getId(); 
     this.name = user.getName(); 
     this.login = user.getLogin(); 
     this.password = user.getPassword(); 
     this.roles = user.getRoles(); 
    } 

    public Integer getId() { 
     return id; 
    } 

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

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getLogin() { 
     return login; 
    } 

    public void setLogin(String login) { 
     this.login = login; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public Set<Role> getRoles() { 
     return roles; 
    } 

    public void setRoles(Set<Role> roles) { 
     this.roles = roles; 
    } 

} 

diese role.java Code ist

import java.util.HashSet; 
import java.util.Set; 

import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.ManyToMany; 

import org.hibernate.validator.constraints.NotEmpty; 
import org.springframework.security.core.GrantedAuthority; 

import com.fasterxml.jackson.annotation.JsonIgnore; 

@Entity 
public class Role implements GrantedAuthority { 

    private static final long serialVersionUID = 1L; 

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

    @NotEmpty 
    private String name; 

    @JsonIgnore 
    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "roles") 
    private Set<User> users = new HashSet<User>(); 

    @Override 
    public String getAuthority() { 
     return name; 
    } 

    public Integer getId() { 
     return id; 
    } 

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

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Set<User> getUsers() { 
     return users; 
    } 

    public void setUsers(Set<User> users) { 
     this.users = users; 
    } 

    public Role(String name, Set<User> users) { 
     this.name = name; 
     this.users = users; 
    } 

    public Role() { 
    } 
} 

application.properties

spring.profiles.active=dev 

spring.datasource.url= jdbc:postgresql://localhost:5432/postgres 
spring.datasource.username=postgres 
spring.datasource.password=12345 

spring.jpa.hibernate.ddl-auto=create 

und Build-Datei. Gradle

buildscript { 
    repositories { 
     mavenCentral() 
     maven { url "https://repo.spring.io/plugins-release" } 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.0.RC1") 
    } 
} 

apply plugin: "java" 
apply plugin: "eclipse" 
apply plugin: "idea" 
apply plugin: "spring-boot" 
apply plugin: "war" 

jar { 
    baseName = "spring-rest-service-oauth" 
    version = "0.1.0" 
} 

repositories { 
    mavenCentral() 
    maven { url "https://repo.spring.io/libs-release" } 
} 

dependencies { 
// compile("org.springframework.boot:spring-boot-starter-data-mongodb") 
    compile 'postgresql:postgresql:9.1-901-1.jdbc4' 

    compile("org.springframework.boot:spring-boot-starter-web") 
    compile("org.springframework.boot:spring-boot-starter-security") 
    compile("org.springframework.boot:spring-boot-starter-data-jpa") 
    compile("org.springframework.security.oauth:spring-security-oauth2") 
    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat") 
    testCompile("org.springframework.boot:spring-boot-starter-test") 
    testCompile("com.jayway.jsonpath:json-path") 
    testCompile("com.jayway.jsonpath:json-path-assert") 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = "2.7" 
} 

Dank der

Antwort

3

Wegen User ist ein reserviertes Schlüsselwort in PostgreSQL zu antworten.

1

können Sie Ihre Tabellennamen entkommen reserviertes Schlüsselwort zu vermeiden, wie unten

import javax.persistence.Entity; 
import javax.persistence.Table; 

@Entity 
@Table(name = "\"User\"") 
public class User 
Verwandte Themen