Criei uma aplicação web em que é possível cadastrar Pessoa Física ou Pessoa Jurídica por um formulário, e as pessoas cadastradas são exibidas numa tabela. Para isso, fiz a classe ClientePessoaFisica e ClientePessoaJuridica extenderem da classe Cliente:
class Cliente:
@Entity
@Table(name = "clientes")
@Inheritance(strategy = InheritanceType.JOINED)
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = "id")
public class Cliente {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String email;
private String telefone;
private String tipoCliente;
@Embedded
private Endereco endereco;
class ClientePessoaFisica:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class ClientePessoaFisica extends Cliente {
private String nome;
private String cpf;
}
class ClientePessoaJuridica:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class ClientePessoaJuridica extends Cliente {
private String razaoSocial;
private String nomeFantasia;
private String cnpj;
}
ClienteRepository:
public interface ClienteRepository extends JpaRepository<Cliente, Long> {
}
Construtor:
@GetMapping("/atualizaPessoaFisica")
public String atualizaPessoaFisica(Long id, Model model) {
var cliente = repository.getReferenceById(id);
model.addAttribute("cliente", cliente);
return "clientes/atualizaPessoaFisica";
}
Ambos os tipos são salvos no ClienteRepository e estão sendo exibidos corretamente na lista, porém ao tentar acessar dados de um id específico pelo repository.getReferenceById(id)
usando, por exemplo, th:value="${cliente.nome}"
é exibido um erro, pois é recuperado o id da tabela clientes onde nome é nulo:
Como posso fazer para acessar o atributo nome na tabela cliente_pessoa_fisica através do Repository? Eu estou trabalhando com a herança da maneira correta? Agradeço desde já.