如何在 Spring 数据 JPA 中映射一个 table 有 2 列引用相同的 table
How to map a table in Spring Data JPA that has 2 columns referencing the same table
我有一个 table,它有 2 个字段(pseudonymProfile 和 realProfile),它们都连接到同一个 table。当我尝试进行如下所示的映射时,我 运行 出错了,因为这 2 个字段在它们的 @JoinColumn 注释中使用了相同的名称 (profile_id)。我的印象是,在定义连接列时,我需要将名称指定为 以便 spring 引导正确执行连接,但在这种情况下它们具有相同的名称,这会导致错误。有人可以帮我看看我错过了什么吗?谢谢!
@Entity
@Table(name = "book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private UUID id;
@Column(name = "title")
private String title;
@ManyToOne
@JoinColumn(name = "profile_id")
private Profile pseudonymProfile;
@ManyToOne
@JoinColumn(name = "profile_id")
private Profile realProfile;
}
@ManyToOne
@JoinColumn(name = "pseudonym_profile_id", referencedColumnName = "profile_id")
private Profile pseudonymProfile;
@ManyToOne
@JoinColumn(name = "real_profile_id", referencedColumnName = "profile_id")
private Profile realProfile;
只是一个应该有效的示例。 JoinColumn#referencedColumnName
但我想如果您完全删除那些 @JoinColumn
,一切都会按预期工作。
更新:
我觉得非常可疑的另一件事是您使用 @OneToMany
而不是 @ManyToOne
这更有意义。
如果您的业务逻辑是支持一本书的多个配置文件,您将不得不使用 Collection<Profile>
和 @OneToMany
。
我有一个 table,它有 2 个字段(pseudonymProfile 和 realProfile),它们都连接到同一个 table。当我尝试进行如下所示的映射时,我 运行 出错了,因为这 2 个字段在它们的 @JoinColumn 注释中使用了相同的名称 (profile_id)。我的印象是,在定义连接列时,我需要将名称指定为
@Entity
@Table(name = "book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private UUID id;
@Column(name = "title")
private String title;
@ManyToOne
@JoinColumn(name = "profile_id")
private Profile pseudonymProfile;
@ManyToOne
@JoinColumn(name = "profile_id")
private Profile realProfile;
}
@ManyToOne
@JoinColumn(name = "pseudonym_profile_id", referencedColumnName = "profile_id")
private Profile pseudonymProfile;
@ManyToOne
@JoinColumn(name = "real_profile_id", referencedColumnName = "profile_id")
private Profile realProfile;
只是一个应该有效的示例。 JoinColumn#referencedColumnName
但我想如果您完全删除那些 @JoinColumn
,一切都会按预期工作。
更新:
我觉得非常可疑的另一件事是您使用 @OneToMany
而不是 @ManyToOne
这更有意义。
如果您的业务逻辑是支持一本书的多个配置文件,您将不得不使用 Collection<Profile>
和 @OneToMany
。