外部库数据模型的 JPA 持久性

JPA persistence for external libraries datamodels

所以我正在制作一个 spring-boot 应用程序,并且我正在从外部库(通过 maven 导入)导入一些数据模型。我有一些模型有一个外部库类型的字段,我希望能够保留它。类似于:

package com.example.module;
import external.Phone;
@Entity
public class Person{
  @Id
  @GeneratedValue
  String id;
  String name;
  Phone phone;
}

问题是,如果 Phone 的实现不是 JPA 感知的,是否可以存储它?例如:

package external;

public class Phone{
  String number;
  String areaCode;
}

在持久性方面取决于你想用它做什么。

如果您希望 Phone 本身就是一个实体,您可以定义一个 orm.xml 文件来指定它的持久性(如果您的 JPA 提供程序使用字节码增强功能,您还必须请小心获取更新的 Java class 文件。

如果您只是想将其持久化,那么请考虑创建一个 JPA AttributeConverter 并将其持久化到与所有者相同的 table 中。您的 JPA 提供程序可能允许也可能不允许通过 AttributeConverter 将其保存到多个列中(我使用的 DataNucleus JPA 支持这种灵活性,但这是供应商扩展,您的扩展可能不可用)。

我最终使用了这种方法 JPA map JSON column to Java Object,因为它允许我完全控制如何持久化字段,甚至是包含我想要的对象的 JSON 的字符串。