0

User entity:

@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>();

Address entity:

@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();

Controller class:

@RestController
public class UserController {

    @Autowired
    IUserService iUserService; 

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

When I call the updateCustomer method wrong data is getting stored. The inserted values are given below,

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

Could you please suggested why wrong data gets stored for user table.

Input data from postman is:

{
    "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"
        }
    ]
}
Jens Schauder
  • 77,657
  • 34
  • 181
  • 348
sharan
  • 21
  • 1
  • Does this answer your question? [JPA @OneToMany : foreign key is null](https://stackoverflow.com/questions/40977239/jpa-onetomany-foreign-key-is-null) – Jens Schauder Apr 14 '20 at 07:30

1 Answers1

0

Because you create a new empty User for each Address:

private User user = new User();

This is basically the same kind of error as JPA @OneToMany : foreign key is null

Jens Schauder
  • 77,657
  • 34
  • 181
  • 348