【问题标题】:Multiple rows being inserted for one to many in spring boot在弹簧靴中一对多插入多行
【发布时间】:2020-04-13 14:55:21
【问题描述】:

用户实体:

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int userId;
    private String firstName;
    private String lastName;
    private String emailId;
    private String phoneNumber;

    @OneToMany(mappedBy="user", cascade= CascadeType.ALL, orphanRemoval = true)
    private Set<Address> Addresses = new HashSet<Address>();

地址实体:

@Entity
public class Address {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int addressId;
    private String streetName;
    private String houseNumber;
    private String pinCode;
    private String district;
    private String state;

    @ManyToOne(fetch = FetchType.LAZY, cascade= CascadeType.ALL)
    @JoinColumn(name="userId")
    @JsonIgnore
    private User user = new User();

控制器类:

@RestController
public class UserController {

    @Autowired
    IUserService iUserService; 

    @RequestMapping(path = "/update")
    public User updateCustomer(@RequestBody User user) {
        return iUserService.save(user);
    }
}

当我调用updateCustomer 方法时,存储了错误的数据。插入的值如下所示,

SELECT * FROM ADDRESS ;
ADDRESS_ID      DISTRICT    HOUSE_NUMBER    PIN_CODE    STATE   STREET_NAME     USER_ID  
1   kalaburgi   287 585105  karnataka   jyanagar    2
2   bangalore   1387    560062  karnataka   anjanpura   3
(2 rows, 1 ms)
SELECT * FROM USER;
USER_ID     EMAIL_ID    FIRST_NAME      LAST_NAME   PHONE_NUMBER  
1   test@gmil.com   sharan  gilke   9900669988
2   null    null    null    null
3   null    null    null    null

您能否建议为什么会为 user 表存储错误数据。

邮递员的输入数据是:

{
    "firstName" : "sharan",
    "lastName" : "gilke",
    "emailId" : "test@gmil.com",
    "phoneNumber" : "9900669988",
    "addresses" : [{
            "streetName" : "jyanagar",
            "houseNumber" : "287",
            "pinCode" : "585105",
            "district" : "kalaburgi",
            "state" : "karnataka"
        },
        {
            "streetName" : "anjanpura",
            "houseNumber" : "1387",
            "pinCode" : "560062",
            "district" : "bangalore",
            "state" : "karnataka"
        }
    ]
}

【问题讨论】:

标签: java spring-boot spring-data-jpa one-to-many


【解决方案1】:

因为您为每个Address 创建了一个新的空User

private User user = new User();

这和JPA @OneToMany : foreign key is null基本是同一种错误

【讨论】:

    猜你喜欢
    • 2018-07-22
    • 1970-01-01
    • 2020-10-28
    • 2018-02-14
    • 2017-12-22
    • 2019-05-03
    • 2021-04-20
    • 1970-01-01
    • 2023-01-07
    相关资源
    最近更新 更多