在Hibernate中使用Hashmap的POJO

时间:2015-01-03 18:30:30

标签: java hibernate hashmap

我有一个具有以下属性的对象:

@Entity
@Table (name="person")
class Person {
    @Id
    @SequenceGenerator(name="pk_sequence",sequenceName="user_id_seq")
    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="pk_sequence")
    @Column(name="id", unique=true, nullable=false)
    private int id;
    @Column(name="age")
    int age;
    @Column(name="email")
    String email;
}

现在是棘手的部分。我想要将地图添加到此对象。这个想法是地图具有未在表中定义但是动态分配的属性。它们存储在具有相同人ID的表中,因此我可以将它们链接起来...问题是如何在Hibernate中映射它?我想过使用继承,但我不确定它是什么方式......甚至我怎么用地图做到这一点。

1 个答案:

答案 0 :(得分:2)

我不知道继承与您的问题有什么关系。您需要做的就是将地图(!)映射为元素集合:

@ElementCollection
private Map<String, String> properties = new HashMap<>();

如果要自定义映射(选择表名,键的列名,值的列名,指向拥有者的外键的列名),请使用相应的注释:

@ElementCollection
@CollectionTable(name = "PERSON_PROPERTY")
@MapKeyColumn(name = "NAME")
@Column(name = "VALUE")
@JoinColumn(name = "PERSON_ID")
private Map<String, String> properties = new HashMap<>();