Boa tarde galera eu aqui denovo pedindo socorro…
Estou estudando JSF 2.0, fiz um projetinho de crud mas estou tendo problemas no mapeamento da entidades. vou colocar aqui as duas classes mapeada de tiver algo errado que alguem possa me ajudar.
Classe 1:
[code]@Entity
public class Cliente implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long idCliente;
private String nome;
private Date dataNascimento;
private String sexo;
@OneToMany(mappedBy = "Cliente", orphanRemoval = true)
private Localidade localidade;
public Cliente() {
}
public Long getIdCliente() {
return idCliente;
}
public void setIdCliente(Long idCliente) {
this.idCliente = idCliente;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
public Date getDataNascimento() {
return dataNascimento;
}
public void setDataNascimento(Date dataNascimento) {
this.dataNascimento = dataNascimento;
}
public Localidade getLocalidade() {
return localidade;
}
public void setLocalidade(Localidade localidade) {
this.localidade = localidade;
}
}[/code]
Classe 2:
[quote]@Entity
public class Localidade implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long idLocalidade;
private String estado;
private String cidade;
public Long getIdLocalidade() {
return idLocalidade;
}
public void setIdLocalidade(Long idLocalidade) {
this.idLocalidade = idLocalidade;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
}[/quote]
ManegedBean:
[code]@ManagedBean(name = “clienteBean”)
@SessionScoped
public class ClienteBean implements Serializable{
private static final long serialVersionUID = 1L;
private Cliente cliente;
public ClienteBean() {
this.cliente = new Cliente();
this.cliente.setLocalidade(new Localidade());
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public String save() {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction transaction = session.beginTransaction();
session.saveOrUpdate(cliente);
transaction.commit();
return "success";
}
}[/code]
Quando clico no botão salvar ele não acha mapeamente e estora esse erro:
[code]exception
javax.servlet.ServletException: org.hibernate.MappingException: Unknown entity: br.com.treino.model.Cliente
javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)
root cause
javax.faces.el.EvaluationException: org.hibernate.MappingException: Unknown entity: br.com.treino.model.Cliente
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
javax.faces.component.UICommand.broadcast(UICommand.java:311)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
[/code]
Olá caiomacedor,
seguinte tenta colocar nesse trecho abaixo cliente com o ‘c’ minúsculo.
@OneToMany(mappedBy = "cliente", orphanRemoval = true)
private Localidade localidade;
Mas ainda acredito que não seja esse o motivo do erro,
teria como você postar o seu persistence.xml.
Abraço
[code]<?xml version="1.0" encoding="UTF-8"?>
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@localhost:1521:XE
HIBERNATE
HIBERNATE
org.hibernate.dialect.Oracle10gDialect
true
thread
[/code]
Ai esta o *.xml
Sua tabela no banco de dados chama-se Cliente e se escreve exatamente desse jeito? Não precisa configurar nenhum arquivo XML para funcionar o seu Hibernate. Sempre utilizo Hibernate com Spring, ou seja, JSF com Spring Annotation e JPA (Hibernate Annotation), como tenho que configurar o applicationContext.xml, dai não tenho problemas com a parte ORM.

qual driver do oracle vc esta usando?
na minha aplicação tive alguns problemas até mudar para:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.2</version>
</dependency>
Tem um erro no seu mapeamento.
Por isso gera o erro.
@OneToMany(mappedBy = "Cliente", orphanRemoval = true)
private Localidade localidade;
Aqui você está definindo um relacionamento de 1 x N BIDIRECIONAL em java, onde a chave estrangeira
fica no lado de N, sendo que a classe Localidade que tem o controle sobre essa relação por ter mapeado o mappedBy
na sua classe Cliente.
Para se resolver o seu problema é preciso adicionar uma propriedade Cliente na sua classe Localidade e mapear ela como
@ManyToOne(cascade={CascadeType.QUALQUER_UM})
Então resumindo, seu mapeamento é bidirecional, ou seja, o cliente conhece a localidade e a localidade conhece o cliente,
mas falta colocar a propriedade cliente dentro da classe localidade.
teste e veja se funciona.
[quote=gustavorozolin]Olá caiomacedor,
seguinte tenta colocar nesse trecho abaixo cliente com o ‘c’ minúsculo.
@OneToMany(mappedBy = "cliente", orphanRemoval = true)
private Localidade localidade;
[/quote]
Na classe Localidade não há nenhum relacionamento com o Cliente, então essa especificação não é valida. Além disso, pelo que entendi, deveria ser uma lista de localidades, caso o cliente possa ter mais de uma Localidade,ficando então assim:
@OneToMany(mappedBy = "cliente", orphanRemoval = true)
private List<Localidade> localidade;
E na classe Localidade a referência ao cliente:
@ManyToOne
@JoinColumn(name="idCliente")
private Cliente cliente;
o marcos1EM está correto.
Ainda falta definir a Lista de Localidades.
Galera depois de muitas tentativas resolvi voltar aqui para perguntar se alguem ja conseguiu usar mapeamentos apenas com annotations nas chasses Java. Depois de fazer tudo que a galera acima sugeriu não obtive sucesso então resolvi fazer um teste usando um arquivo.xml para mapear as classes e tudo funcionou. Mas eu não me conformei, gostaria muito de ver isso funcionando apenas com os annotations nas classes como diz a documentação. vou colocar aqui novos codigos que estou tentando fazer funcionar apenas com annotations. Se alguem souber o que esta errado por favor me dê um help. Lembrando que os codigos abaixo funciona se eu usar *.xml para mapear.
Classe bean:
[code]
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity(name = “Aluno”)
public class Aluno implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long idAluno;
private String nome;
private String matricula;
private String sexo;
@Temporal(TemporalType.TIMESTAMP)
private Date dtNascimento;
public Long getIdAluno() {
return idAluno;
}
public void setIdAluno(Long idAluno) {
this.idAluno = idAluno;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getMatricula() {
return matricula;
}
public void setMatricula(String matricula) {
this.matricula = matricula;
}
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
public Date getDtNascimento() {
return dtNascimento;
}
public void setDtNascimento(Date dtNascimento) {
this.dtNascimento = dtNascimento;
}
}[/code]
Managed Bean:
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.treinamento.hibernate.HibernateUtil;
import br.com.treinamento.model.Aluno;
@ManagedBean(name = "alunoBean")
@SessionScoped
public class ManagedBeanAluno implements Serializable {
private static final long serialVersionUID = 1L;
private Aluno aluno;
public ManagedBeanAluno() {
this.aluno = new Aluno();
}
public String save() {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction transaction = session.beginTransaction();
session.save(aluno); //*********O erro ocorre nessa Linha.**********
transaction.commit();
session.close();
return "listarAluno";
}
public String clear() {
aluno = new Aluno();
return "alunoCadastro";
}
public Aluno getAluno() {
return aluno;
}
public void setAluno(Aluno aluno) {
this.aluno = aluno;
}
}
Exception:
[code]exception
javax.servlet.ServletException: org.hibernate.MappingException: Unknown entity: br.com.treinamento.model.Aluno
root cause
javax.faces.el.EvaluationException: org.hibernate.MappingException: Unknown entity: br.com.treinamento.model.Aluno
root cause
org.hibernate.MappingException: Unknown entity: br.com.treinamento.model.Aluno[/code]
import java.util.ArrayList;
import java.util.List;
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.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "TVIS_PRFL")
@SequenceGenerator(name = "PerfilSeq", sequenceName = "PRFL_SEQ", allocationSize = 1)
public class Perfil {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PerfilSeq")
@Column(name = "ID_PRFL")
private long id;
@Column(name = "DS_PRFL")
private String descricao;
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinTable(name = "TVIS_PRFL_MENU", joinColumns = @JoinColumn(name = "ID_PRFL"), inverseJoinColumns = @JoinColumn(name = "ID_MENU"))
@Where(clause = "ID_MENU_PAI is null")
private List<Menu> listMenu = new ArrayList<Menu>();
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public List<Menu> getListMenu() {
return listMenu;
}
public void setListMenu(List<Menu> menus) {
this.listMenu = menus;
}
}
Utilizo anotação normalmente, volto a colocar que utilizo a arquitetura JSF + Spring Annotation + JPA / Hibernate Annotation. Você importou corretamente o jar do Hibernate de anotação? Ex. hibernate-annotations-3.4.0.GA.jar, hibernate-commons-annotations-3.1.0.GA.jar, não sei se precisa apenas desses, acho que sim.
No mais, não consigo saber o que pode ser o seu problema, vamos ver se outras pessoas ajudam melhor.
Abraços.

Se for esse o import troque
Tira isso aki
import org.hibernate.annotations.Entity
troque por esse
import javax.persistence.Entity;
vlw
Gelera vcs não vão acreditar mas era uma coisa muito besta. Marinheiro de primeira viagem é foda. Depois de vasculhar a API de JSF 2 e do Hibernate descobri que no arquivo: “hibernate.cfg.xml” temos declarar o mapeamento: … Desculpe ai a minha ignorância de muito obrigado a todos que se esforçou em me ajudar.
Isso já aconteceu comigo tbm, nós pensamos logo no pior nunca no mais simples.