java - 使用外键引用反序列化 JPA 实体或如何为映射实体设置外键 ID

标签 java json jpa jpa-2.0

我正在尝试使用 Jackson 将我的 JPA 实体序列化(反)到 JSON 或从 JSON 序列化,以便通过我们的 API 发布实体状态。 FWIW 我正在使用 hibernate 作为 JPA 提供程序。

我遇到的问题可以用一个简单的一对多 Person to Address 示例来说明,如下所示:

@Entity
@Table(name="Person")
public class Person implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private String name;

    // getters & setters
}

@Entity
@Table(name="Address")
public class Address implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private String addressStr;

    @ManyToOne
    @JoinColumn(name="personId")
    private Person person;

    // getters & setters
}

现在,我希望能够为创建地址请求接受这样的 JSON:

{
    "personId": 1,
    "addressStr": "123 Somestreet. Fooville, AK. 11111"
}

并使用 ObjectMapper 创建我的 Address 实例并保存它。但是,我不知道有什么方法可以同时拥有与实体的映射关系和它的外键 setter 。

非常感谢任何想法或指导!

最佳答案

您可以尝试将外键公开为属性,如 Hibernate - Foreign keys instead of Entities 中所述请小心,因为外键的值和对象 gettter 的值并不总是匹配。

但是,我认为最好有一些代码来完成解释 JSON 的工作。您的代码可以获取 personId 值,从数据库中查找实体,如果不存在则生成有意义的异常,然后设置 person 属性。

关于java - 使用外键引用反序列化 JPA 实体或如何为映射实体设置外键 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27824790/

相关文章:

php - 有人对从 ColdFusion 的 serializeJSON 方法到 PHP 的 json_decode 有问题吗?

java - Spring 数据JPA : overriding toPredicate when inner object's variable is criteria

spring - 在 Spring Data JPA 中找不到依赖类型存储库的合格 bean

java - Android 多点触控 - 中指 ACTION.MOVE 被忽略

java - main()中的return返回到哪里?

java - 来自 Jackson 2.2 的 ObjectMapper 的 pretty-print JSON

java - 持久化时间戳类型只有日期没有时间

Java 消除空值检查会导致错误代码吗?

java 8 流如何在结果分组中进行分组?

php - 如何将 Json 数据转换为真实数据 android