簡體   English   中英

java spring 引導中的一對多關系

[英]one to many relation ship in java spring boot

我有 2 個表用戶和機構,主鍵分別是 user_Id 和機構 ID。 盡管一個機構可以有多個用戶,但每個用戶只能在一個機構工作。 所以它是一對多的關系。 但是在我的 mySQL 數據庫中,機構表有固定數量的用戶可以工作的機構。在我的用戶表中有一個機構_Id 的外鍵,指定他為哪個機構工作。 在使用 rest api 添加用戶時,我無法指定他為哪個機構工作

------用戶模型-----

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString

@Entity
@Table(name = "user")
public class User {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="user_Id")
    private int userId;
    @Column(name="name")
    private String name;
    @Column(name="lastname")
    private String lastname;
    @Column(name="email")
    private String email;
    @Column(name="password")
    private String password;
    @Column(name="isActive")
    private boolean isActive;
    @Column(name="lastActive")
    private String lastActive;
    @Column(name="createdDate")
    private String createdDate;
    @Column(name="isBlocked")
    private boolean isBlocked;
    
    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "institution_id", nullable = false)
    private Institution institution;
    
    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
    @JoinTable(name = "user_has_role",
            joinColumns = {
                    @JoinColumn(name = "user_id", referencedColumnName = "user_id",
                            nullable = false, updatable = true)},
            inverseJoinColumns = {
                    @JoinColumn(name = "role_id", referencedColumnName = "role_id",
                            nullable = false, updatable = true)})
    private Set<Role> roles = new HashSet<>();

} 

--------機構模式--------

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString

@Entity
@Table(name = "institution")
public class Institution {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="institution_Id")
    private int institutionId;
    @Column(name="name")
    private String name;
    @Column(name="type")
    private String type;
    @Column(name="location")
    private String location;
    @OneToMany(mappedBy = "institution", fetch = FetchType.LAZY)
    private Set<User> user;
    
}

------控制器-----這里我使用api添加用戶...

@GetMapping("/getAllUsers")
    public List<User> getAllUsers() {
        return (List<User>) userrepository.findAll();
    }
    
    @PostMapping("/addUser")
    public String addUser(@RequestBody User user) {
        userrepository.save(user);
        return "user saved with name: " + user.getName();
    }

有辦法嗎?

--------api 請求---------

{
    "name" : "Jawad",
    "lastname" : "Zakhour",
    "email" : "jawadzakhour@hotmail.com",
    "password" : "jawad123",
    "isActive" : 0,
    "lastActive" : "13/08/2020",
    "createdDate" : "07/07/2020",
    "isBlocked" : 0,
    "institution" : 
        {
            "name" : "maliks",
            "type" : "Merchant",
            "location" : "Le mall sen el fil"
        }
    
}

...

感謝您添加詳細信息。 您可以通過傳遞institution表的主鍵來實現相同的目的,即相應記錄的institution_Id ID。

例如 - 如果您希望用戶Jawad鏈接到機構maliks ,那么您的institution表應該已經插入了一行,其值分別為maliks, Merchant, Le mall sen el fil用於nametypelocation列。 (我假設這個記錄在您的數據庫中有institution_Id _Id = 1)

然后您需要通過以下 JSON 作為請求

{
    "name" : "Jawad",
    "lastname" : "Zakhour",
    "email" : "jawadzakhour@hotmail.com",
    "password" : "jawad123",
    "isActive" : 0,
    "lastActive" : "13/08/2020",
    "createdDate" : "07/07/2020",
    "isBlocked" : 0,
    "institution" : 
        {
            "institutionId" : 1  // As per my assumption stated above
        }
    
}

您需要確保的另一件事是您的User model 具有如下級聯設置

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "institution_id", nullable = false)
    private Institution institution;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM