Olá,
Estou criando um projeto de um Banco Digital, nele há a seguinte hierarquia de classes:
ContaCorrente extends Conta CartaoDebito extends Cartao
Além disso,
- CartaoDebito é um atributo de ContaCorrente ;
- CartaoDebito tem como atributo uma Conta;
Estou com dificuldade de firmar esse relacionamento dentro de um banco de dados utilizando Hibernates.
Seguem as classes e a exception que está dando:
CONTA
@Entity
@SequenceGenerator(name = "numero_da_conta_seq", sequenceName ="numero_da_conta_seq", initialValue = 1000000000 , allocationSize = 1)
@Inheritance(strategy =InheritanceType.SINGLE_TABLE)
public abstract class Conta {
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "numero_da_conta_seq")
@Id
private Long numeroDaConta;
private String agencia = "0001";
@Enumerated(EnumType.STRING)
private EnumConta tipoDeConta;
@ManyToOne
private Cliente cliente;
public BigDecimal saldo = new BigDecimal("0");
private String senha;
@OneToOne(mappedBy = "contaMae", cascade = CascadeType.ALL)
protected ExtratoBancario extrato= new ExtratoBancario(this);
CONTA CORRENTE
@Entity
public class ContaCorrente extends Conta implements RentavelOuTributavel, GerenciavelPeloSistema {
protected LocalDate ultimaCobranca = LocalDate.of(2023, 1, 1);
@OneToOne(mappedBy = "contaAssociada")
private CartaoCredito cartaoDeCredito;
@OneToOne(mappedBy = "contaAssociada")
@JoinColumn(name = "contaAssociada_numeroDaConta")
private CartaoDebito cartaoDeDebito;
CARTÃO
@Entity
@SequenceGenerator(name = "numero_do_cartao_seq", sequenceName ="numero_do_cartao_seq", initialValue = 1000000000*100 , allocationSize = 1)
@Inheritance(strategy =InheritanceType.SINGLE_TABLE)
public abstract class Cartao {
@OneToOne
protected Conta contaAssociada;
@Enumerated(EnumType.STRING)
protected EnumCartao tipoDeCartao;
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "numero_do_cartao_seq")
@Id
private Long numero;
private Integer senha;
private boolean bloqueado;
CARTÃO DE DÉBITO
@Entity
public class CartaoDebito extends Cartao implements GerenciavelPeloSistema {
private BigDecimal limiteDiario = contaAssociada.getCliente().getCategoria().getLimiteDiarioTransacaoDebito();
private BigDecimal limiteDisponivel = limiteDiario;
protected LocalDate ultimaRenovacaoLimiteDisponivel = LocalDate.of(2023, 1, 1);
EXCEPTION
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.fourcamp.bancoOGP.App.main(App.java:19) (NESTA LINHA HÁ A CRIAÇÃO DO ENTITY MANAGER)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: teste3] Unable to build Hibernate SessionFactory
Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
Caused by: org.hibernate.InstantiationException: could not instantiate test object : com.fourcamp.bancoOGP.model.CartaoDebito
Caused by: java.lang.reflect.InvocationTargetException
Caused by: java.lang.NullPointerException
at com.fourcamp.bancoOGP.model.CartaoDebito.<init>(CartaoDebito.java:28)
... 25 more