如果我使用MySQL,我的实体和枚举将成功创建。
我将数据库更改为PostgreSQL-9.4。因此,我有以下错误:
...原因:org.hibernate.tool.schema.spi.SchemaManagementException:无法对JDBC目标执行架构管理[创建表角色(id int8 not null,name enum('ADMIN','USER','SEARCH')not null,主键(id)]在org.hibernate.tool.schema.internal.TargetDatabase aseImpl.accept(TargetDatabase aseImpl.java:59)~[hibernate-core-5.0.12。Final.jar: 5.0.12。最终]在org.hibernate.tool.schema.internal.SchemaMigrorImpl.applySqlString(SchemaMigrorImpl.java:431)~[hibernate-core-5.0.12。Final.jar: 5.0.12。最终]在org.hibernate.tool.schema.internal.SchemaMigrorImpl.applySqlStrings(SchemaMigrorImpl.java:420)~[hibernate-core-5.0.12。Final.jar: 5.0.12。最终]在org.hibernate.tool.schema.internal.SchemaMigrorImpl.create表(SchemaMigrorImpl.java:236)~[hibernate-core-5.0.12。Final.jar: 5.0.12。最终]在SchemaMigrorSchemaUpdate.execute(SchemaUpdate.java:134)~[hibernate-core-5.0.12。Final.jar: 5.0.12。最终]在org.hibernate.tool.hbm2ddl。SchemaUpdate.execute(SchemaUpdate.java:101)~[hibernate-core-5.0.12。Final.jar: 5.0.12。最终]在org. hibernate. interal。SessionFactoryImpl.(SessionFactoryInp. java: 472)~[hibernate-core-5.0.12。最终. jar: 5.0.12。最终]在org. hibernate. boot. interal。SessionFactoryBuilderInp. build(SessionFactoryBuilderInp. java: 444)~[hibernate-core-5.0.12。最终. jar: 5.0.12。最终]在org. hibernate. jpa. boot. interal。EntityManagerFactoryBuilderInp. build(EntityManagerFactoryBuilderInp. j
原因:组织。postgresql。util。PSQLException:错误:类型“enum”不存在组织位置:43。postgresql。果心v3。查询ExecutorImpl。org上的receiveErrorResponse(QueryExecutorImpl.java:2455)~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]。postgresql。果心v3。查询ExecutorImpl。org上的processResults(QueryExecutorImpl.java:2155)~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]。postgresql。果心v3。查询ExecutorImpl。在org上执行(QueryExecutorImpl.java:288)~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]。postgresql。jdbc。PG声明。org上的executeInternal(PgStatement.java:430)~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]。postgresql。jdbc。PG声明。在org上执行(PgStatement.java:356)~(postgresql-9.4.1212.jre7.jar:9.4.1212.jre7)。postgresql。jdbc。PG声明。org上的executeWithFlags(PgStatement.java:303)~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]。postgresql。jdbc。PG声明。org上的executeCachedSql(PgStatement.java:289)~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]。postgresql。jdbc。PG声明。org上的executeWithFlags(PgStatement.java:266)~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]。postgresql。jdbc。PG声明。在sun上执行更新(PgStatement.java:246)~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]。反映NativeMethodAccessorImpl。在sun上调用0(本机方法)~[na:1.8.0\u 191]。反映NativeMethodAccessorImpl。在sun上调用(NativeMethodAccessorImpl.java:62)~[na:1.8.0\u 191]。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0\u 191]。lang.reflect。方法在org上调用(Method.java:498)~[na:1.8.0\u 191]。阿帕奇。公猫jdbc。水塘StatementFacade$StatementProxy。在com上调用(StatementFacade.java:114)~[tomcat-jdbc-8.5.14.jar:na]。太阳代理$Proxy93。组织上的executeUpdate(未知源)~[na:na]。冬眠工具架构。内部的TargetDatabaseImpl。accept(TargetDatabaseImpl.java:56)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]。。。省略32个公共框架
我的枚举:
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;
}
}
我的角色类别:
@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
我的旧应用程序。mysql的yml文件:
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>
如何将其配置为自动生成枚举类型?
“枚举(...)”用于mysql。我删除了该行,问题已修复。
@列(columnDefinition=“枚举('ADMIN','USER','SEARCH”))
但是,开源hibernate类型项目允许您映射特定于数据库的列。我们将从这里和这里了解如何在使用JPA和Hibernate时将PostgreSQL枚举类型映射到Java数组。但我不知道如何将其与Spring靴配合使用。
我假设您想从MySQL迁移到PostgreSQL。
使用DB枚举PostgreSQL不同于MySQL。
阅读有关如何在PostgreSQL中创建枚举的详细信息,请单击此处:https://www.postgresql.org/docs/9.1/datatype-enum.html
这意味着您无法使用JPA/Hibernate创建枚举。
问题内容: 假设我有一个格式为基本XML的文件,如下所示: 我想在运行时变成这样的东西: …,然后将新创建的枚举传递给我的应用程序。我将如何实现这样的目标?可以吗 问题答案: 您尝试做的事情没有任何意义。枚举实际上仅是为了编译时的利益,因为它们表示一组固定的常量。在运行时,动态生成的枚举的含义是什么- 与普通对象有什么不同?例如: 您的XML可以解析为新实例化的对象,这些对象可以存储在某些程序中,
问题内容: 我正在尝试将Postgres自定义类型(名为transmission_result)映射到Hibernate / JPA POJO。postgres自定义类型或多或少是字符串值的枚举类型。 我创建了一个名为PGEnumUserType的自定义EnumUserType以及一个表示postgres枚举值的枚举类。当我对一个真实的数据库运行它时,我收到以下错误:’ERROR:列“状态”的类型
问题内容: 假设是,我将如何产生给定序数的枚举值? 问题答案: 足够了。一条线; 足够简单。
Spring 3.x、JPA 2.0、Hibernate 4.x、Postgresql 9.x. 使用希望映射到Postgresql枚举的枚举属性处理Hibernate映射类。 使用枚举列上的where子句进行查询会引发异常。 SQL: Hibernate xml查询: > 按而不是按枚举查询工作正常。 没有数据库交互的Java工作良好: 不是,与和相同,异常更改为: 在查看https://sta
我有以下结构 包含枚举,该枚举包含或。现在我有了一个类,它包含一个。 这是在swagger yml中指定的(删除了一些不相关的代码) 我使用(也尝试了v3&openapi-generator)生成代码,配置如下: 现在发生的情况是,库将生成注释: 这里的问题是,如果我现在尝试反序列化/序列化包含带有的收件箱的Json字符串,它将引发异常,因为没有名称为的已知子类型。 seralizer期望注释指定
使用JAXB从XSD(作为标准分发,我无法控制,也无法更改)生成一些POJO有很多困难。问题似乎与XSD中定义某些类型的方式有关。下面我粘贴了一个在XSD中定义的名为TransactionCodeType的简单类型,它是一个令牌与值的枚举列表(也定义为令牌)的联合。 使用JAXB,生成的输出(见下文)被翻译为Java中的基本类型字符串。我使用的是来自org的最新版本的maven-jaxb2-plu