gpt4 book ai didi

java - 我如何使用 JPA 加入这 3 个表

转载 作者:行者123 更新时间:2023-11-29 12:50:12 24 4
gpt4 key购买 nike

我想加入这 3 个表。 enter image description here

在这里你可以看到我的个人实体

    @Entity
@Table(name = "Person", schema = "public")

public class PatientEntity {

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

@OneToMany
@JoinTable(name = "person_contact", joinColumns = { @JoinColumn(name = "person_id") }, inverseJoinColumns = { @JoinColumn(referencedColumnName = "id") })
@Column(name = "contact")
private Set<ContactEntity> contacts;
//Getter Setters

这是我的联系实体:

@Entity
@Table(name="contact",schema="public")
public class ContactEntity {
@Id
@Column(name="id")
private Long id;
@Column(name="phone")
private String phone;
//Getter Setters

我刚刚使用带有 Spring JPARepository 的 findById 从表中读取了 Persons,但没有映射联系人。在我的 HTTP 请求期间没有错误,但不是 Contact 而是 null 并且此错误消息:com.sun.jdi.InvocationException 发生调用方法。

业务案例是,每个人都可以有一个或多个联系人。是否可以使用 JPA Annotations 来制作它,还是我需要自己使用 JPQL 来映射它?还是应该为中间表创建一个实体? (人员_联系人)

数据库是 PostgreSQL 数据库。日志中也有此通知:

ERROR: column contacts0_.contacts_id does not exist
Perhaps you meant to reference the column "contacts0_.contact_id".
Position: 306

最佳答案

您的 @JoinTable 有不正确的 @JoinColumn 规范,对应于以下 ddl。

create table person_contact (person_id bigint not null, contacts_id bigint not null, primary key (person_id, contacts_id))

要映射您的数据库结构,请使用以下内容(注意删除了 @Column 注释)

@OneToMany
@JoinTable(name = "person_contact", joinColumns =
{
@JoinColumn(name = "person_id", referencedColumnName = "id"),
},
inverseJoinColumns = {
@JoinColumn(name = "contact_id", referencedColumnName = "id")
})
private Set<ContactEntity> contacts;

我也鼓励您阅读 https://vladmihalcea.com/the-best-way-to-map-a-onetomany-association-with-jpa-and-hibernate/并重新考虑没有连接表的数据库结构(取决于您的负载和进行此数据库更改的努力)

关于java - 我如何使用 JPA 加入这 3 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56019575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com