默认情况下,JPA使用Java序列化来保存未知Serializable类型的属性(以便将序列化表示存储为byte []).
通常它不是您想要的,因为可以有更有效的方式来表示您的数据.例如,BitSet可以有效地表示为数字(如果它的大小有界),或者byte [],或其他东西(遗憾的是,BitSet不提供进行这些转换的方法,因此您需要手动实现它们).
当您确定要在数据库中拥有哪些数据表示时,您需要告知JPA应用必要的转换.有两种选择:
>在getter和setter中实现转换.例如,如下:
@Entity
@Table(name = "myTable")
@Access(AccessType.FIELD)
public class MyClass {
...
@Transient // Do not store this field
protected BitSet tags;
@Access(AccessType.PROPERTY) // Store the property instead
@Column(name = "Tags")
byte[] getTagsInDbRepresentation() {
... // Do conversion
}
void setTagsInDbRepresentation(byte[] data) {
... // Do conversion
}
...
}
>使用特定于提供程序的扩展来隐式执行转换(例如,在Hibernate中为custom types).此方法允许您在不同实体中重用类型转换逻辑.