Mapping a one to many relationship in Hibernate?

hibernate, hibernate-mapping, java, mysql

Solution

What you are doing here is a `bidrectional many-to-one`, where you want to populate objects on both sides of the relationship.

Hibernate will complain if you have a `JoinColumn` on both sides, so just put it on the "owning" side and add `mappedBy` to the other side.

See this example:

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;

    ...
}

As for the particular error you were getting, I believe that was caused by `JoinColumn("id")` in `User` conflicting with the primary key column `id`.

Also see this SO answer.

Problem

I have two tables, a `user` table and a `user_avatar` table. For each user, there are 3 records in the `user_avatar` table, for 3 sizes of avatars (large, medium, small). The `user_avatar` table has a `userId` column which refers to the `User.id` field to specify to which user an avatar belongs to. Here's my `UserAvatar` class: ``` @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; } } ``` And here's how I'm referring to it in the `user ``` @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 } ``` When I run this code, I get the error: ``` Repeated column in mapping for collection: com.xxx.User.avatar column: id ``` What am I doing wrong?

Original source

Related problems