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

Posted

技术标签:

【中文标题】外部库数据模型的 JPA 持久性【英文标题】:JPA persistence for external libraries datamodels 【发布时间】:2015-11-29 00:26:54 【问题描述】:

所以我正在制作一个 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;

【问题讨论】:

【参考方案1】:

就持久性而言,取决于你想用它做什么。

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

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

【讨论】:

我听从了你的第二条建议,在 ORM 映射器类中使用了@Convert。我真的很想避免做任何类型的 xml 配置,因为它总是感觉像是从我想在我的应用程序上强制执行的配置注释方法的约定退了一步。【参考方案2】:

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

【讨论】:

以上是关于外部库数据模型的 JPA 持久性的主要内容,如果未能解决你的问题,请参考以下文章

多个 JPA 持久性单元指向同一个数据库?

JPA JPQL简介

工作流中的数据持久化详解!Activiti框架中JPA的使用分析

领域模型和实体框架之间的存储库模式和映射

如何使用JPA实现Spring 授权服务器的核心服务

Spring Batch/Data JPA 应用程序在调用 JPA 存储库(save、saveAll)方法时不会将数据持久化/保存到 Postgres 数据库