我要为我的模型启动一个使用 Spring 和 Hibernate 管理的 REST 应用程序项目。
我知道 Spring 允许您从 HTTP 请求中获取 Java 对象(使用 @Consumes(JSON)
注释)。如果这个Java对象也是一个Hibernate实体,会不会有冲突?嵌套对象是否正常工作(如 @ManyToOne
关系)?
最佳答案
Maven 依赖
您需要做的第一件事是设置以下 Hibernate Types项目中的 Maven 依赖 pom.xml
配置文件:
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId>
<version>${hibernate-types.version}</version>
</dependency>
领域模型
现在,如果您使用的是 PostgreSQL,则需要使用 Hibernate Types 中的 JsonType
。
为了在您的实体中使用它,您必须在类级别或在 package-info.java 包级别描述符中声明它,如下所示:
@TypeDef(name = "json", typeClass = JsonType.class)
并且,实体映射将如下所示:
@Type(type = "json")
@Column(columnDefinition = "json")
private Location location;
如果您使用的是 Hibernate 5 或更高版本,JSON
类型将由 Postgre92Dialect
自动注册。
否则需要自己注册:
public class PostgreSQLDialect extends PostgreSQL91Dialect {
public PostgreSQL92Dialect() {
super();
this.registerColumnType( Types.JAVA_OBJECT, "json" );
}
}
JsonType
也适用于 Oracle、SQL Server、PostgreSQL、MySQL 和 H2。查看the project页面以获取有关如何在各种关系数据库系统上映射 JSON 列类型的更多详细信息。
关于java - 将 JSON 对象映射到 Hibernate 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22729740/