[mysql]映射一个一对多的关系,在休眠吗?

标签: MySQL Java Hibernate
发布时间: 2015/6/11 23:47:52
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有两个表, user 表和 user_avatar 表。为每个用户中,有 3 条记录在 user_avatar 表 3 尺寸的化身 (大、 中、 小)。

user_avatar表具有 userId 列指 User.id 字段,以指定对哪些用户头像属于。

这里是我 UserAvatar 类:

@Entity @Table(name = "user_avatar")

public class UserAvatar
{
    @Id @GeneratedValue
    private long id;

    @ManyToOne
    @JoinColumn(name = "userId")
    private User user;

    @Enumerated(EnumType.STRING)
    private AvatarSize size;

    private String file;
    private String s3Key;

    @Override
    public String toString()
    {
        return size + " " + file;
    }
}

这里是如何,我指它在 ' 用户

@Entity
public class User
{
    @Id @GeneratedValue
    public Long id;

    @OneToMany
    @JoinColumn(name = "id")
    @OrderColumn(name = "id")
    public UserAvatar[] avatar; //declared array as there'd be at least 3 records
}

当我运行这段代码时,出现错误:

Repeated column in mapping for collection: com.xxx.User.avatar column: id

我到底做错了?

解决方法 1:

你在这里做的是 bidrectional many-to-one ,要填充上双方关系的对象。

休眠会抱怨如果你有 JoinColumn 两侧,所以就把它放在"拥有"一边和添加 mappedBy 到另一边。

看看这个例子:

public class UserAvatar {
    ...

    @ManyToOne
    @JoinColumn(name="userId") // userId is the name of your database FK column
    private User user;

    ...
}

public class User {
    ...

    @OneToMany(mappedBy="user")
    public List<UserAvatar> avatars;

    ...
}

你得到的特定的错误,我相信这由于 JoinColumn("id")User 冲突与主键列 id

此外看到这如此回答

赞助商