简体   繁体   English

休眠/JPA:外键=空

[英]Hibernate/JPA: foreign key = null

below is my 2 entities:下面是我的 2 个实体:

package dev.proj.project.application.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.List;

@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "user")
public class User {

    @Id
    @NotNull
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", updatable = false, nullable = false)
    public int id;

    @NotNull
    @Column(name="firstname")
    private String firstname;

    @NotNull
    @Column(name="lastname")
    private String lastname;

    @NotNull
    @Column(name="email")
    private String email;

    @NotNull
    @Column(name="password")
    private String password;

    @JsonIgnore
    @OneToMany(mappedBy="user", cascade = CascadeType.ALL)
    private List<Address> address;
}
package dev.proj.project.application.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.List;

@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "address")
public class Address {

    @Id
    @NotNull
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", updatable = false, nullable = false)
    private int id;

    @NotNull
    @Column(name="street")
    private String street;

    @NotNull
    @Column(name="house")
    private String house;

    @NotNull
    @Column(name="flat")
    private String flat;

    @NotNull
    @Column(name="code")
    private String code;

    @NotNull
    @Column(name="city")
    private String city;

    @ManyToOne(optional = false)
    @JoinColumn(name = "user_id",nullable = false,updatable = true,insertable = true)
    private User user;

}

I want to create User->Address One-to-many relationship, but if I made post request to /address:我想创建 User->Address 一对多关系,但是如果我向 /address 发出 post 请求:

{ "street": "ulicanewnew", "house": "5", "flat": "2", "code": "20-001", "city": "warsaw", "user_id": 1 } { "street": "ulicanewnew", "house": "5", "flat": "2", "code": "20-001", "city": "warsaw", "user_id": 1 }

user_id is null in my address table:我的地址表中的 user_id 为空:

在此处输入图片说明

Why foreign key in address table is always null?为什么地址表中的外键总是为空? Do you see what is wrong here?你看到这里有什么问题了吗? With direct sql inserts to db - everything works fine将 sql 直接插入到 db - 一切正常

I changed request to:我将请求更改为:

 { "street": "dyr", "house": "5", "flat": "2", "code": "20-001", "city": "warsaw", "user": { "id": 50 } }

and it works, but question for now: how to use它有效,但现在的问题是:如何使用

"user_id" : 50 “用户 ID”:50

in my request, instead of在我的请求中,而不是

"user": {
    "id": 50
}

? ?

Try adding below changes to your address entity.尝试将以下更改添加到您的地址实体。

@JoinColumn(name = "user_id")
@ManyToOne(targetEntity = User.class, fetch = FetchType.LAZY)
private User user;
import java.util.List;
import java.util.Set;
import javax.persistence.*;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Length; 

@Entity
@Table(name = "customer")
public class Customer {
     ...
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     @Column(name = "user_id")
     private int id;

     @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
     private List<DatabaseTable> databaseTables;
     ...
}
...
...
import org.hibernate.validator.constraints.Length;
import javax.persistence.*;

@Entity
@Table(name = "databasetable")
public class DatabaseTable {
    ...
    @ManyToOne
    @JoinColumn(name = "user_idFK")
    private Customer customer;
    ....
}

Something like that works for me.类似的东西对我有用。

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

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