Boa tarde,
Estou com um problema para salvar chave primária composta. Quando tento salvar no banco o seguinte stacktrace e gerado:
EJB Invocation failed on component MontadoraDAO for method public br.com.montadoraVeiculos.Fabrica br.com.montadoraVeiculos.dao.MontadoraDao.salvarFabrica(br.com.montadoraVeiculos.modelo.Forncedor, br.com.montadoraVeiculos.Fabricante): javax.ejb.EJBException: java.lang.NullPointerException
Caused by: java.lang.NullPointerException
br.com.montadoraVeiculos.dao.MontadoraDao.salvarFabrica(MontadoraDao.java:20)
Segue minha classes
Fornecedor
@Entity
@Table(name = "tb_fornacedor", schema = "fornecedor")
@Data
public class Fornecedor implements BaseEntity, Serializable {
@EmbeddedId
private FabricanteId id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id", nullable = false, insertable = false, updatable = false)
private Carro carro;
@Temporal(TemporalType.DATE)
@Column(name = "dt_fabricacao")
private Date dataFabricacao;
@Temporal(TemporalType.DATE)
@Column(name = "dt_saida")
private Date dataSaida;
@Column(name = "situacao_normal", length = 200)
private String normal;
public String toString() {
return "br.com.montadoraVeiculos.modelo.FabricanteId[fabricanteId=" + id + "]";
}
FabricanteId
@Embeddable
public class FabricanteId implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "id", length = 6)
private Integer fabricanteId;
@Column(name = "normal", length = 50)
private String normal;
public FabricanteId(Integer fabricanteId, String normal) {
this.fabricanteId = fabricanteId;
this.normal = nomal;
}
Classe Bean - Médoto salvar
public void salvarFabrica() {
try {
montadoraDao.salvarFabrica(fornecedorEntrada,fabricanteEntrada);
fabricanteEntrada.setDataFabricacao(fabricanteEntrada.getDataFabricao());
fabricanteEntrada.setDataSaida(fabricanteEntrada.getDataSaida());
fabricanteEntrada.setNormal(fabricanteEntrada.getNormal());
addMsg("Incluído com sucesso");
} catch (Exception e) {
addMsgError("Erro ao incluir, {0}", e);
e.printStackTrace();
}
}
Classe DAO
public Fabricante salvarFabrica(Fornecedor fornecedor, Fabricante fabricante) {
int id = fabricante.getId();
String nome = fabricante.getNormal();
Fabricante fabricante = new Fabricante(id, nome);
fabricante.setNormal(nome);
em.persist(fabricante);
return fabricante;
}
Na minha página jsf irei informar apenas o nome, data entrada e data aquisição do veículo.
Alguém poderia ajudar na resolução? Já pesquisei aqui no fórum e todas as soluções não resolveram o meu problema.