JPA - 使用中间表映射同一个表之间的OneToMany关联

时间:2014-09-21 17:24:31

标签: java mysql hibernate jpa spring-data

我正在创建一个应用程序,其中一个重要方面是用户与朋友分享内容的能力。我试图在对象模型中表示这一点,并且我无法使关联正常工作。我使用一个映射表来记录friender和friendee,两者都由用户的主键(id)表示。用户可以拥有许多朋友,也可以被其他用户引用。这就是架构的样子:

Users:
int user_id (PK)
varchar(32) email
varchar(64) password

Users_Map:
int users_map_id (PK)
int friendee_id (FK references users(user_id))
int friender_id (FK references users(user_id))

这就是我设置用户实体的方式:

@Data
@Entity
@Table(name = "users")
public class User extends AbstractPersistable<Long> {

    @Id
    @Column(name = "user_id")
    private Long id;

    @Column
    private String email;

    @Column
    private String password;

    @OneToMany
    @JoinTable(name = "users_map",
            joinColumns = { @JoinColumn(name = "friender_id") },
            inverseJoinColumns = { @JoinColumn(name = "friendee_id") })
    private List<User> friends;
}

部署应用程序时遇到以下错误:

  

org.hibernate.AnnotationException:外键引用   com.x.webapp.data.entity.User来自   com.x.webapp.data.entity.User的编号错误   柱。应该是2

我已经尝试了很多其他配置,包括添加&#34; referencedColumnName&#34;属于每个@JoinColumn,但它们也产生了错误。我还不完全确定我目前拥有的架构是否是将用户映射到一起的最佳方式。

我感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

删除AbstractPersistable的扩展名修复了问题 - 包含@Id引用并与我放在User中的@Id引用冲突。