Persistência com Chave primária composta

2 respostas
U

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.

2 Respostas

Hebert_Coelho

Oq vc tem nesse linha?
Caused by: java.lang.NullPointerException
br.com.montadoraVeiculos.dao.MontadoraDao.salvarFabrica(MontadoraDao.java:20)

tem algo null aí, oq é?

U

Alterei para o seguinte na DAO agora esta dizendo que esta faltando uma fk

(FK_Fornecedor) violada - chave mãe não localizada

Bean

public void salvarFabrica() {  
        try {  
                montadoraDao.salvarFabrica(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();  
            }  
    }

DAO

public Fabricante salvarFabrica(Fabricante fabricante) {  
          
        int id = 0
        String nome = fabricante.getNormal();  
          
        Fabricante fabricante = new Fabricante(id, nome);  
          
        fabricante.setNormal(fabricante.getNormal());
	fabricante.setDataFabricacao(fabricante.getDataFabricao());
	fabricante.setDataSaida(fabricante.getDataSaida()); 
          
        em.persist(fabricante);  
          
        return fabricante;  
      }
Criado 4 de novembro de 2012
Ultima resposta 4 de nov. de 2012
Respostas 2
Participantes 2