在Hibernate中映射一个实体中的多个集合

时间:2013-05-09 19:30:00

标签: java hibernate

对于hibernate和数据库编程来说,我是个新手,说实话...... 我试图将一些类似图形的结构保存到数据库中。

假设我有这样的Java类:

public class User {
    @OneToMany(cascade=CascadeType.ALL)
    private Collection<User> followers = new ArrayList<>();
    @OneToMany(cascade=CascadeType.ALL)
    private Collection<User> friends = new ArrayList<>();
    @Id
    private String name;
    .....
}

问题是我想使用Hibernate将其保存到PostgeSQL数据库。但是我发现它非常重要。例如,一个问题是: 假设我这样做:

User user1 = new User("user1");
User user2 = new User("user2");
user1.getFollowers().add(user2);
user1.getFriends().add(user2);

现在,如果我在user1对象上进行合并,则会出现密钥唯一性约束问题。我想知道这是否是问题,因为我错误配置了Hibernate注释以保存我的结构,或者使用Hibernate以这种方式表示图形是完全错误的方法?任何帮助非常感谢。

1 个答案:

答案 0 :(得分:0)

就个人而言,我会选择生成的ID列,并且不会使用该用户的名称。相反,在数据库中对该名称列设置约束。

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
@Column
private long id;

否则我看不出你的方法有什么问题。运行代码时是否有任何异常?