【问题标题】:Deserialize JPA Entity with foreign key reference OR how to set foreign key ID for mapped entity使用外键引用反序列化 JPA 实体或如何为映射实体设置外键 ID
【发布时间】:2015-02-03 02:32:17
【问题描述】:

我正在尝试使用 Jackson 将我的 JPA 实体(反)序列化到 JSON 或从 JSON 序列化,以便通过我们的 API 发布实体状态。 FWIW 我使用休眠作为 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 实例并将其持久化。但是,我不知道有什么方法可以同时拥有与实体的映射关系和外键的设置器。

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

【问题讨论】:

    标签: java json jpa jpa-2.0


    【解决方案1】:

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

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

    【讨论】:

    • 嗨,很抱歉对这篇旧帖子发表评论,但你能给我举个例子,我可以look up the entity from the database, produce a meaningful exception if it's not present, and set the person property.
    猜你喜欢
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 2022-11-19
    • 2023-04-11
    相关资源
    最近更新 更多