Fórum Relacionamento e um para muitos #485574

15/07/2014

0

Boa tarde a todos estou com problema de utilizar relacionamento de um para muito, ao inserir está dando NullPointer, segue o código abaixo:

@Entity
@Table(name = "produto")
public class Produto implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;

@Column(name = "Descricao")
private String descricao;


@OneToMany(mappedBy = "produto", cascade = { CascadeType.ALL,
CascadeType.PERSIST, CascadeType.MERGE })
private List<ProdutoLoja> produtoLoja;


//Tabela produlo Loja

@Entity
@Table(name = "produtoloja")
public class ProdutoLoja implements Serializable {
private static final long serialVersionUID = -312317668584983632L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;

@ManyToOne
@JoinColumn(name = "id_produto")
@NotNull
private Produto produto;



//bean

@ManagedBean(name = "produto")
@RequestScoped
public class ProdutoBean {

private Produto produto;
ProdutosDAO produtoDAO = new ProdutosDAO();
ProdutosLojaDAO plDAO = new ProdutosLojaDAO();
private List<Produto> produtos;
private ProdutoLoja produtoLoja = new ProdutoLoja();
private List<Foto> fotos;

public ProdutoBean() {
this.novo();
}

public void novo() {
produto = new Produto();
produtoLoja = new ProdutoLoja();
}

public void salvar() {
FacesContext fc = FacesContext.getCurrentInstance();
if (produto.getId() == null) {

produto.getProdutoLoja().add(produtoLoja);
produtoDAO.addProduto(produto);
novo();
FacesMessage facesMessage = new FacesMessage(
"Produto cadastrado com Sucesso! ");
fc.addMessage(null, facesMessage);

} else {
produtoDAO.updateProduto(produto);
FacesMessage facesMessage = new FacesMessage(
"Produto alterado com Sucesso! ");
fc.addMessage(null, facesMessage);
novo();


}

}
Adriano Aguiar

Adriano Aguiar

Responder

Posts

16/07/2014

Ronaldo Lanhellas

Tem certeza que o método "novo()" está sendo chamado ? Imagino que não por isso o erro.

Mas para ser mais exato, em qual linha o erro ocorre ?
Responder

Gostei + 0

16/07/2014

Adriano Aguiar

Boa tarde Ronaldo o erro está ocorrendo nessa linha:

produto.getProdutoLoja().add(produtoLoja);

grato!
Responder

Gostei + 0

16/07/2014

Ronaldo Lanhellas

Adicione este código antes:

 if (produto.getProdutoLoja() == null) {
    produto.setProdutoLoja(new ArrayList<ProdutoLoja>());
 }
Responder

Gostei + 0

16/07/2014

Adriano Aguiar

Ele grava os dados na tabela produto mais em ProdutoLoja não.
Responder

Gostei + 0

16/07/2014

Ronaldo Lanhellas

Esse é outro problema ? O problema do NULLPOINTER foi resolvido com o código acima ?
Responder

Gostei + 0

16/07/2014

Adriano Aguiar

Ronaldo, você pode me orientar onde estou errando, pois se uso cascade era para está dando erro?
Responder

Gostei + 0

16/07/2014

Ronaldo Lanhellas

Eu percebi que você não está setando o produto dentro de produtoLoja, tente fazer o seguinte:

produtoLoja.setProduto(produto);
produto.getProdutoLoja().add(produtoLoja);


Teste e me diga se funcionou.
Responder

Gostei + 0

16/07/2014

Adriano Aguiar

não deu certo veja como ficou

produtoLoja.setProduto(produto);

if (produto.getProdutoLoja() == null) {
produto.setProdutoLoja(new ArrayList<ProdutoLoja>());
}


produtoDAO.addProduto(produto);
Responder

Gostei + 0

16/07/2014

Ronaldo Lanhellas

não deu certo veja como ficou

produtoLoja.setProduto(produto);

if (produto.getProdutoLoja() == null) {
produto.setProdutoLoja(new ArrayList<ProdutoLoja>());
}


produtoDAO.addProduto(produto);


mas está errado, você tem por todo código, veja:

produtoLoja.setProduto(produto);
if (produto.getProdutoLoja() == null) {
        produto.setProdutoLoja(new ArrayList<ProdutoLoja>());
}			
produto.getProdutoLoja().add(produtoLoja);
produtoDAO.addProduto(produto);
Responder

Gostei + 0

16/07/2014

Adriano Aguiar

Opa deu certo, muito obrigado, queria que você me explicassem essa linha produto.setProdutoLoja(new ArrayList<ProdutoLoja>());


grato!
Responder

Gostei + 0

16/07/2014

Ronaldo Lanhellas

Acontece que você criou o objeto produto mas a lista de "produtoLoja" que estava dentro do objeto produto, não foi criada/instanciada. Quando você tenta fazer um "add(produtoLoja)" recebe NullPointerException porque a lista não foi instanciada.

Entendeu ?
Responder

Gostei + 0

16/07/2014

Adriano Aguiar

sim, valeu obrigado.
Responder

Gostei + 0

18/07/2014

Adriano Aguiar

Boa tarde Ronaldo, surgiu uma duvida será que estou fazendo correto com jsf, para inserir está dando certo, quando vou editar mostra na tela de cadastro somente os dados do produto, Produto Loja fica vazio para resolver no método que chamo pagina editar tenho que fazer select passando codigo do produto e retornar produtoLoja, veja como estou fazendo abaixo:


<p:inputText value="#{produto.produto.descricao}" size="50"
required="true" requiredMessage="Informe a descricao do produto"></p:inputText>

<p:inputText value="#{produto.produtoLoja.valor_venda}" size="10"
required="true" requiredMessage="Informe o Valor de Venda"></p:inputText>


public String doUpdateProduto() {
produtoLoja = plDAO.getProdutoPLoja(produto.getId());
return "produtos";
}

grato.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar