简体   繁体   English

Spring 引导 JPA OneToMany 和 ManyToOne 为我带来 JoinTable 中的所有寄存器

[英]Spring Boot JPA OneToMany and ManyToOne bring me all registers in JoinTable

Hi im using JPA and i need to use OneToMany and ManyToOne, it works well with one register but when i insert more than one register the result contains all data registered in jointable.嗨,我正在使用 JPA,我需要使用 OneToMany 和 ManyToOne,它适用于一个寄存器,但是当我插入多个寄存器时,结果包含在可连接中注册的所有数据。

Example:例子:

I have the following tables, User and Company , and Join table USER_COMPANY_REL我有以下表, UserCompany以及 Join 表USER_COMPANY_REL

Table User表用户

USER_ID
NAME
ADDRESS
...

Table Company表公司

COMPANY_ID
NAME
WEB_SITE
...

USER_COMPANY_REL USER_COMPANY_REL

REL_ID
USER_ID
COMPANY_ID

I have Data of 3 Users and 2 Companies, if i have in my USER_COMPANY_REL table one user with one company, it works, if i put the same user with another comany it works, but when i put another user with another company, when i get Data from some user (with one or more companies registered) the result is: User info plus as many companies as are registered in Join table.我有 3 个用户和 2 个公司的数据,如果我的 USER_COMPANY_REL 表中有一个用户和一个公司,它可以工作,如果我把同一个用户放在另一个公司它工作,但是当我把另一个用户放在另一个公司时,当我从某个用户(注册了一个或多个公司)那里获取数据,结果是:用户信息加上在 Join 表中注册的公司。

I have this in my Spring Boot code我的 Spring 引导代码中有这个

Class COMPANY Class 公司

...
 @ManyToOne
      @JoinTable(name = "USER_COMPANY_REL",
              joinColumns = {@JoinColumn(name = "COMPANY_ID", insertable = false,
                      updatable = false, referencedColumnName = "COMPANY_ID")},
              inverseJoinColumns = {@JoinColumn(name = "USER_ID", insertable = false,
                      updatable = false, referencedColumnName = "USER_ID")}
      )
    private User user;
...

Class USER Class 用户

...
@OneToMany
      @JoinTable(name = "USER_COMPANY_REL",
              joinColumns = {@JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID")},
              inverseJoinColumns = {@JoinColumn(name = "COMPANY_ID", referencedColumnName = "COMPANY_ID")}
      )
...

And this is postman result这是 postman 结果在此处输入图像描述

Why is this happening?为什么会这样? can you help me?你能帮助我吗?

Regards问候

First of all use auto increment column (ID for example, or use any other auto generated id strategy) in both tables and column COMPANY_ID and USER_ID put as unique columns to avoid duplicates.首先在表和列 COMPANY_ID 和 USER_ID 中使用自动递增列(例如 ID,或使用任何其他自动生成的 id 策略)作为唯一列以避免重复。 You should use only @JoinColumns in Company class.您应该仅在公司@JoinColumns中使用 @JoinColumns。 Here is an example:这是一个例子:

@ManyToOne
@JoinColumns(@JoinColumn(name = "COMPANY_ID", insertable = false,
                  updatable = false, referencedColumnName = "COMPANY_ID"),
             @JoinColumn(name = "USER_ID", insertable = false,
                  updatable = false, referencedColumnName = "USER_ID"))
private User user;

On the other side (in User class) you should have only this:另一方面(在用户类中)你应该只有这个:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
List<Company> companies=new LinkedList<Company>();

It can be List or Set of companies.它可以是List或公司Set

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM