JavaSpringJPA多列内部联接
我对SpringJPA还是新手,我在尝试在一个实体上使用两列进行内部连接时遇到了一个问题
我有这些桌子
CREATE TABLE event (
id bigint unsigned auto_increment primary key comment 'id of the event',
user_id bigint unsigned not null comment 'id of the user',
organizer_id bigint unsigned not null comment 'id of the organizer user'
);
CREATE TABLE user (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT 'user id',
email VARCHAR(256) NOT NULL COMMENT 'user email',
name VARCHAR(32) NOT NULL COMMENT 'user name',
surname VARCHAR(64) NOT NULL COMMENT 'user surname'
)
这件事发生在哪里。用户id和事件。组织者id映射到用户。身份证
我还让这些实体映射这些表
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String email;
private String name;
private String surname;
@OneToMany(mappedBy = "user")
private List<Event> events;
}
@Entity
public class Event {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User user;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "organizer_id", nullable = false)
private User organizer;
}
其思想是在用户列表中获取用户的所有事件,其中用户id由事件表上的用户id或组织者id映射
我曾尝试使用多个@joinColumn注释(并从@manyToOne()中删除mappedBy),但遇到了以下错误:
组织。冬眠AnnotationException:外键引用的列数错误。应该是1
我找到的唯一解决方案是将它放在其他列表中以便使用,但我确信我缺少正确的方法,因为它应该是一个非常常见的用例
提前多谢
# 1 楼答案
JPA是数据库中实体的表示,在检索数据库中的内容后,您的需求需要进行后处理
在JPA级别,将两个不同的关系“合并”到一个集合中并不是很常见的用例
所以,一种方法是: