java - 如何在 JPA <= 2.0 中模拟属性转换器?

标签 java jakarta-ee jpa jpa-2.0

JPA 2.1 引入了一个不错的新特性 Attribute Converter - 见一篇文章,例如这里:http://www.thoughts-on-java.org/jpa-21-how-to-implement-type-converter/

它允许您拥有某种类型的属性并将其作为其他内容存储在数据库列中。例如。您有一个字段颜色为 java.awt.Color 类型的实体,但您希望它作为 String 存储在数据库中,例如 REDWHITE

@Entity
class Tag {
    String name;
    java.awt.Color color; // I want it to be stored as a different type
}

有没有办法在 JPA <= 2.0 中获得类似的结果?我想为不是 enum 的类型执行此操作。

我们不区分业务领域层和@Entity 类。当然,如果它们之间存在某种映射,我可以想象出许多可行的解决方案。我正在寻找的是一种解决方案,我们在业务领域层中直接使用 @Entity 类本身。

最佳答案

我的建议是制作此列@Transient 并添加另一个@Column,这将是awt.Color 的字符串值,使用 getter 和 setter 作为转换器。

你的类将是这样的:

@Transient
java.awt.Color color;
@Column
String colorField;

每次您使用 Color 使用 setter 时,此 setter 将解码颜色并将其添加到 colorField 字段。

public setColor(java.awt.Color color){
  this.colorField = color.toString();
  this.color = color;
}

关于java - 如何在 JPA <= 2.0 中模拟属性转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31189848/

相关文章:

java - 我应该如何克隆嵌套 ArrayList?

java - 如何将我的 Web 应用程序同步到我的数据库?

java - hibernate MaterializedClobType 存储长对象而不是文本

java - 转换和检索映射的键集

java - Spring 禁用@EnableResourceServer

java - 为什么通过 slf4j 进行日志记录会导致饥饿?

java - 如何在 Maven 的本地项目中安装依赖项?

java - Jax-RS( Jersey )上下文中 WebApplicationException 和 WebServiceException 的区别

java - 没有 JDBC 类型 : 1111 的方言映射

java - 将 JSON 数组发布到 Spring Boot 2 JPA 中