Java 如何使用JPA连接这3个表
我想加入这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
@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;