java - 将 JSON 对象映射到 Hibernate 实体

标签 java json spring hibernate rest

我要为我的模型启动一个使用 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/

相关文章:

java - 如何使用java查找大字符串中出现频率最高的字符?

java - 有没有办法强制 JAVA 在 Elements 中打印空的 CDATA?

javascript - 如何过滤 JavaScript 对象以仅显示我需要的数据

java - 用于可选

java - JPA Criteria 从一些表中选择

json - 戈朗 : Read non valid JSON from text file

php - AFNetworking 2.0图片上传和JSON返回错误

java - Spring POST 不返回有效数字

java - 使用 spring 启用 WebSocket

java - 如何使用 spring data cassandra 创建表?