Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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连接这3个表_Java_Postgresql_Jpa - Fatal编程技术网

Java 如何使用JPA连接这3个表

Java 如何使用JPA连接这3个表,java,postgresql,jpa,Java,Postgresql,Jpa,我想加入这3个表。 这是我的个人实体 @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", joinCo

我想加入这3个表。

这是我的个人实体

    @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
我只是从带有Spring JPARepository的findById的表中读取人员,但是没有联系人映射。在我的HTTP请求过程中没有错误,但不是联系人,而是null,并且此错误消息: 调用方法时发生com.sun.jdi.InvocationException

商业案例是,每个人都可以有一个或多个联系人。有没有可能使用JPA注释来实现它,或者我需要自己用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\u contact”,JointColumns=
{
@JoinColumn(name=“person\u id”,referencedColumnName=“id”),
},
反向连接列={
@JoinColumn(name=“contact\u id”,referencedColumnName=“id”)
})
私人设置联系人;

我还鼓励您阅读并重新考虑没有联接表的db结构(取决于您的负载和进行此db更改的努力)

为什么您没有将人员映射到联系人(oneToMany)?inverseJoinColumns看起来很可疑。请尝试使用contact_id而不是id。除此之外,请重新考虑dB更改以避免连接表。@esprittn必须是吗?或者这只是在我想知道哪个联系人是哪个人的情况下发生的?@Lesiak DB无法更改,如果我将其更改为“contact_id”,则会显示以下失败消息:在org.hibernate.mapping.Table(public.contact)及其相关的超表和辅助表中找不到逻辑名称为contact_id的列
create table person_contact (person_id bigint not null, contacts_id bigint not null, primary key (person_id, contacts_id))
@OneToMany
@JoinTable(name = "person_contact", joinColumns =
        {
                @JoinColumn(name = "person_id", referencedColumnName = "id"),
        },
        inverseJoinColumns = {
                @JoinColumn(name = "contact_id", referencedColumnName = "id")
        })
private Set<ContactEntity> contacts;