Если я использую MySQL, мои сущности и перечисления создаются успешно.
Я изменил свою базу данных на PostgreSQL-9.4.Итак, у меня есть следующие ошибки:
... Причина: org.hibernate.tool.schema.spi.SchemaManagementException: Невозможно выполнить управление схемой для цели JDBC [создать таблицуроль (id int8 не ноль, имя enum ('ADMIN', 'USER', 'SEARCH') не ноль, первичный ключ (id))] в org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept (TargetDatabaseImpl.java:59) ~ [hibernate-core-5.0.12.Final.jar: 5.0.12.Final] в org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlString (SchemaMigratorImpl.java:431) ~ [hibernate-core-5.0.12.Final.jar: 5.0.12.Final] в org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlStrings (SchemaMigratorImpl.java:420) ~ [hibernate-core-5.0.12.Final.jar: 5.0.12.Final] в org.hibernate.tool.schema.internal.SchemaMigratorImpl.createTable (SchemaMigratorImpl.java:236) ~ [hibernate-core-5.0.12.Final.jar: 5.0.12.Final] вorg.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigrationToTargets (SchemaMigratorImpl.java:167) ~ [hibernate-core-5.0.12.Final.jar: 5.0.12.Final] в org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigration (SchemaMigratorImpl.java:60) ~ [hibernate-core-5.0.12.Final.jar:5.0.12.Final] в org.hibernate.tool.hbm2ddl.SchemaUpdate.execute (SchemaUpdate.java:134) ~ [hibernate-core-5.0.12.Final.jar: 5.0.12.Final] в org.hibernate.tool.hbm2ddl.SchemaUpdate.execute (SchemaUpdate.java:101) ~ [hibernate-core-5.0.12.Final.jar: 5.0.12.Final] в org.hibernate.internal.SessionFactoryImpl. (SessionFactoryImpl.java:472)~ [hibernate-core-5.0.12.Final.jar: 5.0.12.Final] в org.hibernate.boot.internal.SessionFactoryBuilderImpl.build (SessionFactoryBuilderImpl.java:444) ~ [hibernate-core-5.0.12.Final.jar: 5.0.12.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build (EntityManagerFactoryBuilderImpl.java:879) ~ [hibernate-entitymanager-5.0.12.Final.jar: 5.0.12.Final]... пропущено 22 общих кадра
Причина: org.postgresql.util.PSQLException: ОШИБКА: тип "enum" не существует Поз.ition: 43 в org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse (QueryExecutorImpl.java:2455) ~ [postgresql-9.4.1212.jre7.jar: 9.4.1212.jre7] в org.postgresql3.ecore.ecore.processResults (QueryExecutorImpl.java:2155) ~ [postgresql-9.4.1212.jre7.jar: 9.4.1212.jre7] at org.postgresql.core.v3.QueryExecutorImpl.execute (QueryExecutorImpl.java:28q ~ - post-java-288 ~)9.4.1212.jre7.jar: 9.4.1212.jre7] в org.postgresql.jdbc.PgStatement.executeInternal (PgStatement.java:430) ~ [postgresql-9.4.1212.jre7.jar: 9.4.1212.jre7] вorg.postgresql.jdbc.PgStatement.execute (PgStatement.java:356) ~ [postgresql-9.4.1212.jre7.jar: 9.4.1212.jre7] в org.postgresql.jdbc.PgStatement.executeWithFlags (PgState.) ~ [postgresql-9.4.1212.jre7.jar: 9.4.1212.jre7] at org.postgresql.jdbc.PgStatement.executeCachedSql (PgStatement.java:289) ~ [postgresql-9.4.1212.jre7.jar: 9.4.1212.jre7] at org.postgresql.jdbc.PgStatement.executeWithFlags (PgStatement.java:266) ~ [postgresql-9.4.1212.jre7.jar: 9.4.1212.jre7]в org.postgresql.jdbc.PgStatement.executeUpdate (PgStatement.java:246) ~ [postgresql-9.4.1212.jre7.jar: 9.4.1212.jre7] в sun.reflect.NativeMethodAccessorImpl.invoke0 [родной метод]: 1.8.0_191] at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) ~ [na: 1.8.0_191] at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessor: 19: 19: 19):] в java.lang.reflect.Method.invoke (Method.java:498) ~ [na: 1.8.0_191] в org.apache.tomcat.jdbc.pool.StatementFacade $ StatementProxy.invoke (StatementFacade.java:114) ~[tomcat-jdbc-8.5.14.jar: na] вcom.sun.proxy. $ Proxy93.executeUpdate (неизвестный источник) ~ [na: na] at org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept (TargetDatabaseImpl.java:56) ~ [hibernate-core-5.0.12.Final.jar: 5.0.12.Final] ... пропущено 32 общих кадра
My Enum:
public enum RoleType {
ADMIN("ADMIN"),
SEARCH("SEARCH"),
USER("USER");
private final String value;
RoleType(final String value) {
this.value = value;
}
@Override
public String toString() {
return value;
}
}
My Role Class:
@Entity
@Table(name = "role")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonIgnore
private Long id;
@NotNull
@Enumerated(EnumType.STRING)
@Column(columnDefinition = "enum('ADMIN', 'USER', 'SEARCH')")
private RoleType name;
@ManyToMany(mappedBy = "roles")
@JsonIgnore
private Set<User> users;
public Role() {
}
public Role(RoleType name) {
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public RoleType getName() {
return name;
}
public void setName(RoleType name) {
this.name = name;
}
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
@Override
public String toString() {
return name.toString();
}
}
Мой файл application.yml для postgresql:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/mydb?autoReconnect=true&useSSL=false
username: username
password: password
driverClassName: org.postgresql.Driver
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
Мой старый файл application.yml для mysql:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb?autoReconnect=true&useSSL=false
username: user
password: password
driverClassName: com.mysql.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
Мой pom.xml
<dependencies>
<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>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<!--dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency-->
</dependencies>
Как я могу настроить его для автоматической генерации типов перечислений?