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

pre*_*ice 5 java json jpa jpa-2.0

我正在尝试使用Jackson来(de)将我的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
}
Run Code Online (Sandbox Code Playgroud)

现在,我希望能够接受诸如此类的JSON来创建地址请求:

{
    "personId": 1,
    "addressStr": "123 Somestreet. Fooville, AK. 11111"
}
Run Code Online (Sandbox Code Playgroud)

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

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

Sha*_*non 1

您可以尝试将外键公开为属性,如Hibernate - 外键而不是实体中所述。只是要小心,因为外键的值和对象 gettter 的值并不总是匹配。

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