NullPointer ao salvar Relacionamento ManyToOne e OneToMany (hibernate)

2 respostas
kvnallen

Seguinte, estou tentando salvar um produto, e esse produto tem um fornecedor, mas sempre que tento salvar dá nullpointer, o porque eu não sei :/

Aqui seguem as classes

Produto
@Entity
@Table(name = "tbl_produto")
public class Produto {

	@Id
	@GeneratedValue
	@Column(name = "id_produto")
	private long id;

	@Column(name = "nome", nullable = false, length = 50)
	private String nome;

	@Column(name = "preco_unitario", length = 10, nullable = false)
	private double precoUnitario;

	@Column(name = "preco_venda", length = 10)
	private double precoVenda;

	@Column(name = "unidade_medida", length = 2)
	private String unidadeMedida;

	@Column(name = "quantidade_disponivel", length = 20)
	private int quantidadeDisponivel;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "id_fornecedor", insertable = true, updatable = true)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.SAVE_UPDATE)
	private Fornecedor fornecedor;

	@Column(name = "tipo")
	private String tipo;

Fornecedor

@Entity
@Table(name="tbl_fornecedor")
public class Fornecedor {

	@Id
	@GeneratedValue
	@Column(name="id_fornecedor")
	private long id;

	@Column(name = "nome", nullable = false, unique=true , length = 50)
	private String nome;

	@Column(name = "telefone", length = 20)
	private String telefone;

	@Column(name = "endereco", length = 70)
	private String endereco;

	@Column(name = "numero", length = 6)
	private String numero;

	@Column(name = "bairro", length = 20)
	private String bairro;

	@Column(name = "conta", length = 30)
	private String conta;

	@Column(name = "banco", length = 30)
	private String banco;

	@Column(name = "cnpj", length = 14)
	private String cnpj;

	@Column(name = "email", length = 40)
	private String email;
	
	@OneToMany(mappedBy="fornecedor", fetch=FetchType.EAGER)
	@Cascade(CascadeType.ALL)
	private List<Produto> produtos;

Então, primeiro eu cadastro um fornecedor:

Fornecedor f = new Fornecedor();
		
		
		f.setNome("João");
		f.setEndereco("Rua Joao de Deus");
		f.setBairro("Centro");
		f.setNumero("18");
		f.setEmail("[email removido]");
		
		fachada.salvarFornecedor(f);
E faço o cadastro do produto, seto o Id do fornecedor a ser salvo no produto e seto o produto a ser salvo no fornecedor, por final salvo o produto.
p.setNome("Cerveja Skol");
		p.setPrecoUnitario(2);
		p.setPrecoVenda(3);
		p.setQuantidadeDisponivel(1);
		p.setTipo("Bebida");
		p.setUnidadeMedida("teste");
		
		fachada.salvarProduto(p);
		
		//Seta o fornecedor
		f.setId(2);
		p.setFornecedor(f);
	
		//Seta o produto no fornecedor
		ArrayList<Produto> produtos = new ArrayList<Produto>();
		f.setProdutos(produtos);
	
		//Salva o Produto
		fachada.salvarProduto(p);

Mas dá nullpointer na parte de salvar o Produto, alguem tem alguma dica porque ? :(

Aqui segue o erro :
129 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final
137 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.6.4.Final
139 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
142 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
146 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
217 [main] INFO org.hibernate.cfg.Configuration - configuring from resource: /hibernate.cfg.xml
217 [main] INFO org.hibernate.cfg.Configuration - Configuration resource: /hibernate.cfg.xml
287 [main] WARN org.hibernate.util.DTDEntityResolver - recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
342 [main] INFO org.hibernate.cfg.Configuration - Configured SessionFactory: 
425 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: modelo.Bebida
472 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity modelo.Bebida on table tbl_bebida
579 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: modelo.Funcionario
579 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity modelo.Funcionario on table tbl_funcionario
588 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: modelo.Fornecedor
589 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity modelo.Fornecedor on table tbl_fornecedor
625 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: modelo.Ingrediente
626 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity modelo.Ingrediente on table tbl_ingrediente
629 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: modelo.Mesa
629 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity modelo.Mesa on table tbl_mesa
638 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: modelo.Veiculo
638 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity modelo.Veiculo on table tbl_veiculo
641 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: modelo.Pizza
641 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity modelo.Pizza on table tbl_pizza
644 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: modelo.Sabor
645 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity modelo.Sabor on table tbl_sabor
648 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: modelo.Produto
648 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity modelo.Produto on table tbl_produto
665 [main] INFO org.hibernate.cfg.annotations.CollectionBinder - Mapping collection: modelo.Fornecedor.produtos -> tbl_produto
666 [main] INFO org.hibernate.cfg.Configuration - Hibernate Validator not found: ignoring
670 [main] INFO org.hibernate.cfg.search.HibernateSearchEventListenerRegister - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
677 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - Using Hibernate built-in connection pool (not for production use!)
677 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - Hibernate connection pool size: 20
677 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - autocommit mode: false
685 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost/lapizza
686 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - connection properties: {user=root, password=****}
1079 [main] INFO org.hibernate.dialect.Dialect - Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
1094 [main] INFO org.hibernate.cfg.SettingsFactory - Database ->
       name : MySQL
    version : 5.5.22
      major : 5
      minor : 5
1094 [main] INFO org.hibernate.cfg.SettingsFactory - Driver ->
       name : MySQL-AB JDBC Driver
    version : mysql-connector-java-5.1.18 ( Revision: [email removido]-20110930151701-jfj14ddfq48ifkfq )
      major : 5
      minor : 1
1095 [main] INFO org.hibernate.transaction.TransactionFactoryFactory - Using default transaction strategy (direct JDBC transactions)
1096 [main] INFO org.hibernate.transaction.TransactionManagerLookupFactory - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
1097 [main] INFO org.hibernate.cfg.SettingsFactory - Automatic flush during beforeCompletion(): disabled
1097 [main] INFO org.hibernate.cfg.SettingsFactory - Automatic session close at end of transaction: disabled
1097 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC batch size: 15
1097 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC batch updates for versioned data: disabled
1097 [main] INFO org.hibernate.cfg.SettingsFactory - Scrollable result sets: enabled
1097 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC3 getGeneratedKeys(): enabled
1097 [main] INFO org.hibernate.cfg.SettingsFactory - Connection release mode: auto
1098 [main] INFO org.hibernate.cfg.SettingsFactory - Default schema: lapizza
1098 [main] INFO org.hibernate.cfg.SettingsFactory - Maximum outer join fetch depth: 2
1098 [main] INFO org.hibernate.cfg.SettingsFactory - Default batch fetch size: 1
1098 [main] INFO org.hibernate.cfg.SettingsFactory - Generate SQL with comments: disabled
1098 [main] INFO org.hibernate.cfg.SettingsFactory - Order SQL updates by primary key: disabled
1098 [main] INFO org.hibernate.cfg.SettingsFactory - Order SQL inserts for batching: disabled
1098 [main] INFO org.hibernate.cfg.SettingsFactory - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
1100 [main] INFO org.hibernate.hql.ast.ASTQueryTranslatorFactory - Using ASTQueryTranslatorFactory
1100 [main] INFO org.hibernate.cfg.SettingsFactory - Query language substitutions: {}
1100 [main] INFO org.hibernate.cfg.SettingsFactory - JPA-QL strict compliance: disabled
1100 [main] INFO org.hibernate.cfg.SettingsFactory - Second-level cache: enabled
1100 [main] INFO org.hibernate.cfg.SettingsFactory - Query cache: disabled
1100 [main] INFO org.hibernate.cfg.SettingsFactory - Cache region factory : org.hibernate.cache.impl.NoCachingRegionFactory
1101 [main] INFO org.hibernate.cfg.SettingsFactory - Optimize cache for minimal puts: disabled
1101 [main] INFO org.hibernate.cfg.SettingsFactory - Structured second-level cache entries: disabled
1106 [main] INFO org.hibernate.cfg.SettingsFactory - Echoing all SQL to stdout
1106 [main] INFO org.hibernate.cfg.SettingsFactory - Statistics: disabled
1106 [main] INFO org.hibernate.cfg.SettingsFactory - Deleted entity synthetic identifier rollback: disabled
1106 [main] INFO org.hibernate.cfg.SettingsFactory - Default entity-mode: pojo
1106 [main] INFO org.hibernate.cfg.SettingsFactory - Named query checking : enabled
1107 [main] INFO org.hibernate.cfg.SettingsFactory - Check Nullability in Core (should be disabled when Bean Validation is on): enabled
1133 [main] INFO org.hibernate.impl.SessionFactoryImpl - building session factory
1139 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [wrapper_materialized_blob] overrides previous : org.hibernate.type.WrappedMaterializedBlobType@51b109ef
1139 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [materialized_clob] overrides previous : org.hibernate.type.MaterializedClobType@3e0353cf
1139 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [clob] overrides previous : org.hibernate.type.ClobType@4c735ad7
1139 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [java.sql.Clob] overrides previous : org.hibernate.type.ClobType@4c735ad7
1139 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [materialized_blob] overrides previous : org.hibernate.type.MaterializedBlobType@29510077
1139 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [wrapper_characters_clob] overrides previous : org.hibernate.type.CharacterArrayClobType@4f599d2
1139 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [characters_clob] overrides previous : org.hibernate.type.PrimitiveCharacterArrayClobType@1845ac89
1139 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [blob] overrides previous : org.hibernate.type.BlobType@64262d2
1139 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [java.sql.Blob] overrides previous : org.hibernate.type.BlobType@64262d2
1526 [main] INFO org.hibernate.impl.SessionFactoryObjectFactory - Factory name: 
1529 [main] INFO org.hibernate.util.NamingHelper - JNDI InitialContext properties:{}
1532 [main] WARN org.hibernate.impl.SessionFactoryObjectFactory - Could not bind factory to JNDI
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
	at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
	at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
	at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
	at javax.naming.InitialContext.getNameParser(Unknown Source)
	at org.hibernate.util.NamingHelper.bind(NamingHelper.java:75)
	at org.hibernate.impl.SessionFactoryObjectFactory.addInstance(SessionFactoryObjectFactory.java:113)
	at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:367)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
	at hibernate.HibernateUtil.<clinit>(HibernateUtil.java:22)
	at repositorio.RepositorioBebida.<init>(RepositorioBebida.java:18)
	at fachada.Fachada.iniciarRepositorios(Fachada.java:39)
	at fachada.Fachada.<init>(Fachada.java:51)
	at fachada.Fachada.obterInstancia(Fachada.java:59)
	at Teste.main(Teste.java:19)
A sessão  existe!!
A sessão  existe!!
A sessão  existe!!
A sessão  existe!!
A sessão  existe!!
Hibernate: 
    insert 
    into
        lapizza.tbl_fornecedor
        (bairro, banco, cnpj, conta, email, endereco, nome, numero, telefone) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?)
Erro Dao salvar: null
Erro Dao salvar: null
java.lang.NullPointerException
	at dao.Dao.salvar(Dao.java:28)
	at repositorio.RepositorioProduto.salvarProduto(RepositorioProduto.java:22)
	at fachada.Fachada.salvarProduto(Fachada.java:170)
	at Teste.main(Teste.java:39)
java.lang.NullPointerException
	at dao.Dao.salvar(Dao.java:28)
	at repositorio.RepositorioProduto.salvarProduto(RepositorioProduto.java:22)
	at fachada.Fachada.salvarProduto(Fachada.java:170)
	at Teste.main(Teste.java:50)

2 Respostas

LPJava

as classes estão mapeadas no arquivo do hibernate?

kvnallen

Sim

Criado 1 de maio de 2012
Ultima resposta 2 de mai. de 2012
Respostas 2
Participantes 2