Cześć,
Mam pewien problem z utworzeniem obiektu i zapisaniu go w bazie danych. Mianowicie, mam klasę User - przy tworzeniu użytkownika inicjalizowany jest portfel - klasa Wallet.
Przy dodawaniu użytkownika do tabeli w bazie danych chciałbym, żeby dodany do innej tabeli został od razu wallet przypisany do tego użytkownika.
Oprócz tego mam dodane klasy '...Service' odpowiednio dla User i Wallet.
Żeby osiągnąć zamierzony efekt, powinienem dodać do klasy UserService
repozytorium klasy Wallet i na nim operować czy może do klasy UserController
dodać WalletService
?
Klasa User:
@Table(name = "user")
@Entity
@Getter @Setter
@NoArgsConstructor
@EqualsAndHashCode
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "login")
private String login;
@Column(name = "password")
private String password;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
private String email;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "wallet_id", referencedColumnName = "id")
private Wallet wallet;
public User(String login, String password, String firstName, String lastName, String email) {
this.login = login;
this.password = password;
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.wallet = new Wallet(0.0, "EUR");
}
}
Klasa Wallet:
@Table(name = "wallet")
@Entity
@Getter @Setter
@NoArgsConstructor
@EqualsAndHashCode
public class Wallet {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "amount")
private Double amount;
@Column(name = "currency")
private String currency;
@OneToOne(mappedBy = "wallet", cascade = CascadeType.MERGE)
private User user;
public Wallet(Double amount, String currency) {
this.amount = amount;
this.currency = currency;
}
}