问题:我能以某种方式将我的Entity类的两个字段映射到数据库中的一个列吗?
场景:数据库未完全规范化。存在一个包含复合信息的列。这不是我的实际用例,但可理解的示例可能是平面中某点的X坐标和Y坐标。因此,数据库可能包含字符串12:45
,而实体类应仅包含两个整数字段x
宽度值12
和y
,其值为45
。
目前,Entity类只有两个额外的x和y的getter和setter,并执行正确的转换。但我想知道是否有办法让JPA在后台神奇地为我做这件事。
我已经在使用自定义转换器类,例如用于在枚举和数据库列之间进行适当的映射,但这仅适用于Entity类中的字段与数据库中的列之间的“一对一”映射。
当然,这将是在数据库中重新设计表格的最佳方式,但目前不是一种选择。
供应商特定的解决方案也很好。
答案 0 :(得分:1)
通过指定JPA在实体中使用您的访问者来处理转换,可以非常简单地将2个实体字段放入一个数据库列中:
@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中。