0

我想创建一个可以存储值列表的休眠表。我正在做类似的事情:

@Column(name = "userHobbies")
@ElementCollection(targetClass = String.class)
@CollectionTable(schema = "school", name = "hobby", joinColumns = @JoinColumn(name = "id"))
private List<String> userHobbies= null;

在用户表中,我没有看到“userHobbies”列。虽然它是空的,但创建了一个表爱好。任何人都可以就如何处理这种情况提出一些建议吗?

编辑:

向有兴趣的用户插入新记录的代码:

ArrayList<String> hobbies= new ArrayList<String>();
hobbies.add(football);
hobbies.add(soccer);

User user = new User();
user.setName("ben");
user.setEmail("XYZ@gmail.com");
user.setUserHobbies(hobbies);

getDAO().makePersistent(user);

除了 userHobbies 所有其他字段都正确保存。

4

1 回答 1

1

这就是预期的结果。@CollectionTable用于指定存储列表中每个元素的表的名称 ( name = "hobby")。joinColumns用于指定在此爱好表中用于存储对其拥有用户的引用的列的名称。并且@Column用于指定在爱好表中保存元素值(爱好名称)的列的名称。

所以你最终会得到这个,非常类似于 OneToMany 映射:

Table user:
ID (primary key), name, ...

Table hobby:
ID (foreign key referencing user.ID), userHobbies

我会将列命名为“hobby”或“hobbyName”而不是“userHobbies”,因为它包含一个单一的爱好。

于 2013-04-23T20:33:25.063 回答