Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA-使用中间表在同一个表之间映射一个域的关联_Java_Mysql_Hibernate_Jpa_Spring Data - Fatal编程技术网

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

Java JPA-使用中间表在同一个表之间映射一个域的关联,java,mysql,hibernate,jpa,spring-data,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 friende

我正在创建一个应用程序,其中一个重要方面是用户能够与朋友共享内容。我正试图在对象模型中表示这一点,但我很难让关联正常工作。我正在使用一个映射表来记录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;
}
@数据
@实体
@表(name=“users”)
公共类用户扩展了可抽象持久化{
@身份证
@列(name=“user\u id”)
私人长id;
@纵队
私人字符串电子邮件;
@纵队
私有字符串密码;
@独身癖
@JoinTable(name=“users\u map”,
joinColumns={@JoinColumn(name=“friender_id”)},
inverseJoinColumns={@JoinColumn(name=“Friendeee_id”)})
私人名单朋友;
}
部署应用程序时,我遇到以下错误:

org.hibernate.AnnotationException:外键引用 com.x.webapp.data.entity.User from com.x.webapp.data.entity.User拥有错误的 专栏。应该是2

我尝试了很多其他配置,包括为每个@JoinColumn添加“referencedColumnName”属性,但它们也产生了错误。我也不完全确定当前的模式是否是将用户映射到一起的最佳方式


谢谢你的帮助

删除AbstractPersistable的扩展修复了这个问题-它包含了一个@Id引用,并且与我在用户中放置的@Id引用冲突。

只是一个注意:您描述的是一个多个,而不是一个多个。“friends\u map”表的定义在哪里?如果你的意思是“用户地图”,那么为什么有一列“用户地图id”不是关系的一部分呢?哎呀,什么是打字错误?它是用户地图。你说的“不属于关系”是什么意思?它对用户之间的映射没有意义-是否应该替换/删除它?在将关系更改为ManyToMany时,我也会遇到同样的错误。带有Set或List(无顺序)的1-N/M-N联接表将有两列,即FKs,它们将构成PK。因此,为什么在JPAI中没有为连接表定义人工“id”的注释?丢弃了用户的friend id,并生成了一个由friender_id和Friendeee_id组成的复合主键,同样的错误仍然发生。这是你的建议吗?