将java BitSet保存到DB
发布时间:2020-12-14 05:58:46 所属栏目:Java 来源:网络整理
导读:使用JPA,我希望能够将BitSet保存到数据库并将其拉回到程序中. 假设我有: @Entity@Table(name = "myTable")public class MyClass { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "Object_Id") protected long id; @Column(name
使用JPA,我希望能够将BitSet保存到数据库并将其拉回到程序中.
假设我有: @Entity @Table(name = "myTable") public class MyClass { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "Object_Id") protected long id; @Column(name = "Tags") protected BitSet tags; ... getters & setters etc... } 还应该定义“columnDefinition”吗?我真的不明白它是如何持久的(使用toString()?)而且它是如何从数据库中加载回来的. 你能帮帮我一下吗? 谢谢! 解决方法
默认情况下,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).此方法允许您在不同实体中重用类型转换逻辑. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |