我有一个具有以下属性的对象:
@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中映射它?我想过使用继承,但我不确定它是什么方式......甚至我怎么用地图做到这一点。
答案 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<>();