默認情況下,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).此方法允許您在不同實體中重用類型轉換邏輯.