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

Hon*_*dek 5 java jpa java-ee jpa-2.0

JPA 2.1引入了一个很好的新功能属性转换器 - 请参阅此处的文章:http://www.thoughts-on-java.org/jpa-21-how-to-implement-type-converter/

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

@Entity
class Tag {
    String name;
    java.awt.Color color; // I want it to be stored as a different type
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在JPA <= 2.0中获得类似的结果?我想做一个不是的类型enum.

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

Koi*_*oer 6

我建议使用此列@Transient并添加另一个@Column将是String的值awt.Color,使用getters和setter作为转换器.

你的课将如下:

@Transient
java.awt.Color color;
@Column
String colorField;
Run Code Online (Sandbox Code Playgroud)

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

public setColor(java.awt.Color color){
  this.colorField = color.toString();
  this.color = color;
}
Run Code Online (Sandbox Code Playgroud)

  • 只是一个小小的评论,你不需要瞬态场"颜色"只需创建瞬态设置器和吸气器,你自动进行转换 (2认同)