Fala pessoal, beleza? Estou preso tentando fazer um relacionamento entre minhas entidades "Cliente" e "ContaBancaria". Alguém poderia me dar uma luz, por favor?
@Entity(name = "Cliente")
@Table(name = "clientes")
@Getter
@Setter
@AllArgsConstructor
@EqualsAndHashCode
public class Cliente {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private String cpf;
private String numeroContato;
@Enumerated(EnumType.STRING)
private Beneficio beneficio;
@Embedded
private Endereco endereco;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "conta_id", referencedColumnName = "id")
private ContaBancaria contaBancaria;
private boolean ativo = true;
public Cliente() {
}
public Cliente(DadosCadastraCliente dados) {
this.nome = dados.nome();
this.cpf = dados.cpf();
this.numeroContato = dados.numeroContato();
this.beneficio = dados.beneficio();
this.endereco = new Endereco(dados.endereco());
this.contaBancaria = new ContaBancaria(dados.contaBancaria());
this.ativo = true;
}
}
@Entity(name = "Conta")
@Table(name = "contas")
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class ContaBancaria {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String numeroDaConta;
private TipoDeConta tipoDeConta;
private BigDecimal saldo;
public ContaBancaria(DadosDetalhamentoContaBancaria dados) {
this.numeroDaConta = UUID.randomUUID().toString();
this.tipoDeConta = dados.tipoDeConta();
this.saldo = dados.saldo();
}
public ContaBancaria(DadosCadastraContaBancaria dadosCadastraContaBancaria) {
this.numeroDaConta = UUID.randomUUID().toString();
this.tipoDeConta = dadosCadastraContaBancaria.tipoDeConta();
this.saldo = dadosCadastraContaBancaria.saldo();
}
}
@RestController
@RequestMapping("/clientes")
public class ClienteController {
@Autowired
private ClienteRepository clienteRepository;
ContaBancaria contaBancaria = new ContaBancaria();
@PostMapping(value = "/signup")
@Transactional
public ResponseEntity cadastraCliente(
@RequestBody DadosCadastraCliente dadosCadastraCliente,
UriComponentsBuilder uriComponentsBuilder) {
var resultCliente = new Cliente(dadosCadastraCliente);
clienteRepository.save(resultCliente);
var uri =uriComponentsBuilder.path("/clientes/{id}").buildAndExpand(resultCliente.getId()).toUri();
return ResponseEntity.created(uri).body(new DadosDetalhamentoCliente(resultCliente));
}
}
@RestController
@RequestMapping("/contas")
public class ContaBancariaController {
@Autowired
private ContaBancariaRepository contaBancariaRepository;
@PostMapping(value = "/signup")
@Transactional
public ResponseEntity cadastraContaBancaria(@RequestBody DadosCadastraContaBancaria dadosCadastraContaBancaria, UriComponentsBuilder uriComponentsBuilder) {
var resultContaBancaria = new ContaBancaria(dadosCadastraContaBancaria);
contaBancariaRepository.save(resultContaBancaria);
var uri = uriComponentsBuilder.path("/contas/{id}").buildAndExpand(resultContaBancaria.getId()).toUri();
return ResponseEntity.created(uri).body(new DadosDetalhamentoContaBancaria(resultContaBancaria));
}
}