I have to classes with one to one relationship. I'm creating database using flywaydb. I want to be able to get wallet from db by userId.
User class
@Data
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Integer id;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "wallet_id", referencedColumnName = "id")
private UserWallet userWallet;
...
}
Wallet class
@Entity
@Data
@Table(name = "users_wallet")
public class UserWallet {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Integer id;
@OneToOne(mappedBy = "userWallet")
@JoinColumn(name = "user_id", referencedColumnName = "id")
private User userId;
...
}
CREATE TABLE users_wallet
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id INT UNSIGNED,
currency VARCHAR(3),
value DOUBLE,
PRIMARY KEY (id)
);
CREATE TABLE users
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
wallet_id INT UNSIGNED,
PRIMARY KEY (id)
FOREIGN KEY (wallet_id) REFERENCES users_wallet (id)
);
Methods to save to the database
@Override
public User addUser(UserUpdateRequest userUpdateRequest) {
User newUser = new User();
UserWallet newWallet = createWallet();
this.saveUser(newUser, userUpdateRequest, newWallet);
return newUser;
}
private UserWallet createWallet() {
UserWallet userWallet = new UserWallet();
userWallet.setValue(0.0);
userWallet.setCurrency("PLN");
return userWallet;
}
private void saveUser(User user, UserUpdateRequest updateRequest, UserWallet userWallet) {
user.setUserWallet(userWallet);
setUserDetails(user, updateRequest);
userRepository.save(user);
}
After save User to database I got:
User(id=3, userWallet=UserWallet(id=3, userId=null, currency=PLN, value=0.0),
I want a value in variable userId. How it should be done to be able to get wallet by userId?