Несколько строк вставляются для загрузки одного в несколько весной - PullRequest
0 голосов
/ 13 апреля 2020

Сущность пользователя:

@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"
        }
    ]
}

1 Ответ

0 голосов
/ 14 апреля 2020

Поскольку вы создаете новый пустой User для каждого Address:

private User user = new User();

Это в основном тот же тип ошибки, что и JPA @OneToMany: внешний ключ равен нулю

...