Boa noite pessoal.
Estou com problemas em um cadastro que estou tentando montar. A minha minha base de dados tenho uma tabela chamada teste e ela tem uma FK para uma tabela chamada produto e outra FK para uma tabela chamada casouso.
No formulário xhtml tenho um campo combo que vai exibir o nome do produto e outro combo para o título do caso de uso. Mesma lógica. O caso é que só o campo do produto é preenchido. Está dando erro por causa do caso de uso e não entendo porque.
O erro é o seguinte:
javax.el.PropertyNotFoundException: /restrito/teste.xhtml @52,134 value="#{testeBean.teste.casouso}": The class 'gestao.teste.Teste' does not have the property 'casouso'.
No xhtml criei os combos assim:
<h:outputLabel value="Caso de Uso:" for="casouso" />
<h:selectOneMenu id="casouso" value="#{testeBean.teste.casouso}" converter="casousoConverter" rendered="#{!empty contextoBean}">
<f:selectItems value="#{casousoBean.lista}" var="casouso" itemValue="#{casouso}" itemLabel="#{casouso.titulo}" />
</h:selectOneMenu>
<h:outputLabel value="Produto:" for="produto" />
<h:selectOneMenu id="produto" value="#{testeBean.teste.produto}" converter="produtoConverter" rendered="#{!empty contextoBean}">
<f:selectItems value="#{produtoBean.lista}" var="produto" itemValue="#{produto}" itemLabel="#{produto.nome}" />
</h:selectOneMenu>
E na clase Teste eu crio esse campo caso de uso assim:
@ManyToOne(targetEntity = CasoUso.class, fetch = FetchType.EAGER)
@JoinColumn(name = "casouso", nullable = true)
@ForeignKey(name = "fk_teste_casouso")
@Cascade({org.hibernate.annotations.CascadeType.MERGE, org.hibernate.annotations.CascadeType.SAVE_UPDATE})
private CasoUso casouso;
E no construtor faço assim:
public Teste() {
this.casouso = new CasoUso();
this.produto = new Produto();
}
Alguém tem idéia do que fiz errado?
Olá cristiano!
Tem como postar o código da classe CasoUso e da classe Produto?
Já verificou se CasoUso contem o atributo Teste teste recebendo o @OneToMany?
Até +!
Bom dia.
Na classe CasoUso não criei o atributo Teste teste recebendo o @OnToMany, o que tenho é um atributo CasoUso casouso recebendo o @ManyToOne na classe Teste.
Seguem as classes:
package gestao.casouso;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class CasoUso implements Serializable {
private static final long serialVersionUID = 5970319999919464192L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "codigo", nullable = false, length = 10)
private Integer codigo;
@Column(name = "titulo", length = 50)
private String titulo;
@Column(name = "descricao", length = 2000)
private String descricao;
/**
* @return the codigo
*/
public Integer getCodigo() {
return codigo;
}
/**
* @param codigo the codigo to set
*/
public void setCodigo(Integer codigo) {
this.codigo = codigo;
}
/**
* @return the titulo
*/
public String getTitulo() {
return titulo;
}
/**
* @param titulo the titulo to set
*/
public void setTitulo(String titulo) {
this.titulo = titulo;
}
/**
* @return the descricao
*/
public String getDescricao() {
return descricao;
}
/**
* @param descricao the descricao to set
*/
public void setDescricao(String descricao) {
this.descricao = descricao;
}
/**
* @return the serialversionuid
*/
public static long getSerialversionuid() {
return serialVersionUID;
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
result = prime * result
+ ((descricao == null) ? 0 : descricao.hashCode());
result = prime * result + ((titulo == null) ? 0 : titulo.hashCode());
return result;
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
CasoUso other = (CasoUso) obj;
if (codigo == null) {
if (other.codigo != null)
return false;
} else if (!codigo.equals(other.codigo))
return false;
if (descricao == null) {
if (other.descricao != null)
return false;
} else if (!descricao.equals(other.descricao))
return false;
if (titulo == null) {
if (other.titulo != null)
return false;
} else if (!titulo.equals(other.titulo))
return false;
return true;
}
}
package gestao.produto;
import gestao.setor.Setor;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.ForeignKey;
@Entity
public class Produto implements Serializable {
private static final long serialVersionUID = 8065940517148727330L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "codigo", nullable = false, length = 10)
private Integer codigo;
@Column(name = "nome", length = 50)
private String nome;
@ManyToOne(targetEntity = Setor.class, fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
@JoinColumn(name = "setor", nullable = true)
@ForeignKey(name = "fk_produto_setor")
@Cascade({org.hibernate.annotations.CascadeType.MERGE, org.hibernate.annotations.CascadeType.SAVE_UPDATE})
private Setor setor;
public Produto() {
this.setor = new Setor();
}
/**
* @return the codigo
*/
public Integer getCodigo() {
return codigo;
}
/**
* @param codigo the codigo to set
*/
public void setCodigo(Integer codigo) {
this.codigo = codigo;
}
/**
* @return the nome
*/
public String getNome() {
return nome;
}
/**
* @param nome the nome to set
*/
public void setNome(String nome) {
this.nome = nome;
}
/**
* @return the setor
*/
public Setor getSetor() {
return setor;
}
/**
* @param setor the setor to set
*/
public void setSetor(Setor setor) {
this.setor = setor;
}
/**
* @return the serialversionuid
*/
public static long getSerialversionuid() {
return serialVersionUID;
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
result = prime * result + ((nome == null) ? 0 : nome.hashCode());
result = prime * result + ((setor == null) ? 0 : setor.hashCode());
return result;
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Produto other = (Produto) obj;
if (codigo == null) {
if (other.codigo != null)
return false;
} else if (!codigo.equals(other.codigo))
return false;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
if (setor == null) {
if (other.setor != null)
return false;
} else if (!setor.equals(other.setor))
return false;
return true;
}
}
package gestao.teste;
import gestao.casouso.CasoUso;
import gestao.produto.Produto;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.ForeignKey;
@Entity
public class Teste implements Serializable {
private static final long serialVersionUID = 685767444108967856L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "codigo", nullable = false, length = 10)
private Integer codigo;
@Column(name = "titulo", length = 100)
private String titulo;
@Column(name = "descricao", length = 2000)
private String descricao;
@Column(name = "prioridade", length = 5)
private String prioridade;
@Column(name = "resultado", length = 9)
private String resultado;
@Column(name = "status", length = 9)
private String status;
@ManyToOne(targetEntity = Produto.class, fetch = FetchType.EAGER)
@JoinColumn(name = "produto", nullable = true)
@ForeignKey(name = "fk_teste_produto")
@Cascade({org.hibernate.annotations.CascadeType.MERGE, org.hibernate.annotations.CascadeType.SAVE_UPDATE})
private Produto produto;
@ManyToOne(targetEntity = CasoUso.class, fetch = FetchType.EAGER)
@JoinColumn(name = "casouso", nullable = true)
@ForeignKey(name = "fk_teste_casouso")
@Cascade({org.hibernate.annotations.CascadeType.MERGE, org.hibernate.annotations.CascadeType.SAVE_UPDATE})
private CasoUso casouso;
public Teste() {
this.casouso = new CasoUso();
this.produto = new Produto();
}
/**
* @return the codigo
*/
public Integer getCodigo() {
return codigo;
}
/**
* @param codigo the codigo to set
*/
public void setCodigo(Integer codigo) {
this.codigo = codigo;
}
/**
* @return the titulo
*/
public String getTitulo() {
return titulo;
}
/**
* @param titulo the titulo to set
*/
public void setTitulo(String titulo) {
this.titulo = titulo;
}
/**
* @return the descricao
*/
public String getDescricao() {
return descricao;
}
/**
* @param descricao the descricao to set
*/
public void setDescricao(String descricao) {
this.descricao = descricao;
}
/**
* @return the prioridade
*/
public String getPrioridade() {
return prioridade;
}
/**
* @param prioridade the prioridade to set
*/
public void setPrioridade(String prioridade) {
this.prioridade = prioridade;
}
/**
* @return the resultado
*/
public String getResultado() {
return resultado;
}
/**
* @param resultado the resultado to set
*/
public void setResultado(String resultado) {
this.resultado = resultado;
}
/**
* @return the status
*/
public String getStatus() {
return status;
}
/**
* @param status the status to set
*/
public void setStatus(String status) {
this.status = status;
}
/**
* @return the produto
*/
public Produto getProduto() {
return produto;
}
/**
* @param produto the produto to set
*/
public void setProduto(Produto produto) {
this.produto = produto;
}
/**
* @return the casouso
*/
public CasoUso getCasoUso() {
return casouso;
}
/**
* @param casouso the casouso to set
*/
public void setCasoUso(CasoUso casouso) {
this.casouso = casouso;
}
/**
* @return the serialversionuid
*/
public static long getSerialversionuid() {
return serialVersionUID;
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((casouso == null) ? 0 : casouso.hashCode());
result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
result = prime * result
+ ((descricao == null) ? 0 : descricao.hashCode());
result = prime * result
+ ((prioridade == null) ? 0 : prioridade.hashCode());
result = prime * result + ((produto == null) ? 0 : produto.hashCode());
result = prime * result
+ ((resultado == null) ? 0 : resultado.hashCode());
result = prime * result + ((status == null) ? 0 : status.hashCode());
result = prime * result + ((titulo == null) ? 0 : titulo.hashCode());
return result;
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Teste other = (Teste) obj;
if (casouso == null) {
if (other.casouso != null)
return false;
} else if (!casouso.equals(other.casouso))
return false;
if (codigo == null) {
if (other.codigo != null)
return false;
} else if (!codigo.equals(other.codigo))
return false;
if (descricao == null) {
if (other.descricao != null)
return false;
} else if (!descricao.equals(other.descricao))
return false;
if (prioridade == null) {
if (other.prioridade != null)
return false;
} else if (!prioridade.equals(other.prioridade))
return false;
if (produto == null) {
if (other.produto != null)
return false;
} else if (!produto.equals(other.produto))
return false;
if (resultado == null) {
if (other.resultado != null)
return false;
} else if (!resultado.equals(other.resultado))
return false;
if (status == null) {
if (other.status != null)
return false;
} else if (!status.equals(other.status))
return false;
if (titulo == null) {
if (other.titulo != null)
return false;
} else if (!titulo.equals(other.titulo))
return false;
return true;
}
}
Olá!
Tentou fazer o mapeamento do @OneToMany na classe CasoUso, criando um atributo teste?
Outro detalhe que percebi foi que a Classe teste está mapeada como @Entity, mas no xhtml vc a usa como bean? Não sei se o hibernate consegue mapear um ManagedBean…
Até +!
Opa…
Obrigado pelas dicas.
Fiz uns ajustes e agora está funcionando.
Abraço.
Blz!
Se der, coloca a solução aqui no fórum.
Não esqueça de editar o primeiro post e colocar [RESOLVIDO] no assunto.
Até +!
Na realidade o que me quebrou as pernas foi um problema de case sensitive.
Onde eu chamava o bean #{casouso} tive de substituir por #{casoUso}.