将两个字段映射到一个数据库列

Map two fields to one database column

问题: 我是否能够以某种方式将我的实体 class 的两个字段映射到数据库中的一个列?

场景:数据库没有完全规范化。存在一个包含复合信息的列。这不是我的实际用例,但一个易于理解的示例可能是平面中某个点的 X 和 Y 坐标。因此数据库可能包含一个字符串 12:45 而实体 class 应该只包含两个整数字段 x 宽度值 12y45.

目前,实体 class 只有两个额外的 getter 和 setter 用于 x 和 y,并执行正确的翻译。但我想知道是否有办法让 JPA 在后台神奇地为我做这件事。

我已经在使用自定义转换器 classes,例如用于枚举和数据库列之间的正确映射,但这仅适用于实体 class 中的字段与数据库中的列之间的 "one-to-one" 映射。

当然,重新设计数据库中的 table 是最可取的方法,但目前还不行。

供应商特定的解决方案也可以。

2 将实体字段转换为一个数据库列可以相当简单地通过指定 JPA 使用实体中的访问器来处理转换:

@Entity
@Access(AccessType.FIELD)
class myEntity {
@Id
int id;
@Transient
String x;
@Transient
String y;

@Mutable //EclipseLink specific to prevent change tracking issues
@Access(AccessType.PROPERTY)
@Column(name="yourDatabaseFieldName")
private String getCoords() {
 return x+":"+y;
}
private void setCoords(String coords) {
  //parse the string and set x+y.
}

EclipseLink 和 Hibernate 具有能够处理反向的转换映射; 2 个或多个数据库字段合并为一个 java 属性 但这在 JPA 之外。