java – 使用Hibernate JPA将对象存储在列中
是否可以存储像以下使用只有一个表的东西?现在,hibernate会做的是创建两个表,一个用于Family,一个用于人.我希望将familymembers对象序列化到数据库的列中.
@Entity(name = "family") class Family{ private final List<Person> familyMembers; } class Person{ String firstName,lastName; int age; } 解决方法
这是一个可怕的设计,我真的不推荐它(你应该创建另一个表),但它是可能的.
首先,您需要使用byte []属性来保存数据库中存储在BLOB中的人员列表的序列化版本.所以用@Lob来注释它的getter(我会使getter和setter为private而不暴露它们).然后,暴露“假的”getter和setter返回或设置一个List< Person>从字节[].我在下面的示例中使用Commons Lang中的 @Entity(name = "family") class Family implements Serializable { // ... private byte[] familyMembersAsByteArray; public Family() {} @Lob @Column(name = "members",length = Integer.MAX_VALUE - 1) private byte[] getFamilyMembersAsByteArray() { // not exposed return familyMembersAsByteArray; } private void setFamilyMembersAsByteArray((byte[] familyMembersAsByteArray() { // not exposed this.familyMembersAsByteArray = familyMembersAsByteArray; } @Transient public List<Person> getFamilyMembers() { return (List<Person>) SerializationUtils.deserialize(familyMembersAsByteArray); } public void setParticipants(List familyMembers) { this.familyMembersAsByteArray = SerializationUtils.serialize((Serializable) familyMembers); } } 不要忘记使Person类Serializable并添加一个真正的serialVersionUID(我只是在这里显示一个默认值): public class Person implements Serializable { private static final long serialVersionUID = 1L; // ... private String firstName,lastName; private int age; } 但是,让我坚持,这是一个可怕的设计,它将是非常脆弱的(改变的人可能需要“迁移”BLOB的内容,以避免反序列化问题,这将变得痛苦,你应该重新考虑这个想法,并使用另一个表的替代(或者我不明白为什么你使用数据库). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |