0
I have a very simple problem using JSF + JPA c/ Hibernate. I have two classes: Message and Comment.. The Message class contains a list of Comments. But when trying to make this relationship the error below happens. Can anyone help? Grateful!
Error:
An Error Occurred:
[PersistenceUnit: persistence] Unable to build Hibernate SessionFactory~
Console:
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.List, at table: mensagem, for columns: [org.hibernate.mapping.Column(comentarios)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:349)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:322)
at org.hibernate.mapping.Property.isValid(Property.java:241)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:496)
at org.hibernate.mapping.RootClass.validate(RootClass.java:270)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1360)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1851)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:857)
... 75 more
Java commentary.:
@Entity
public class Comentario {
@Id @GeneratedValue
private Long id;
private String descricao;
public Comentario(){}
public Comentario(String descricao){
this.descricao=descricao;
}
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;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Comentario other = (Comentario) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
Message:
@Entity
@Table(name = "mensagem")
public class Mensagem {
@Id
@GeneratedValue
private Long id;
private String nome;
private String cor;
private List<Comentario> comentarios;
@OneToMany(mappedBy="mensagem")
public List<Comentario> getComentarios() {
return comentarios;
}
public void setComentarios(List<Comentario> comentarios) {
this.comentarios = comentarios;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getNome() {
return this.nome;
}
public void setCor(String cor) {
this.cor = cor;
}
public String getCor() {
return this.cor;
}
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return this.id;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Mensagem other = (Mensagem) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
Messaging:
@ManagedBean
public class MensagemUI {
private Mensagem mensagem;
private Comentario comentario;
public Comentario getComentario() {
return comentario;
}
public void setComentario(Comentario comentario) {
this.comentario = comentario;
}
public Mensagem getMensagem() {
return mensagem;
}
private String novaMensagem = "";
private String novoResumo = "";
private String novaDescricao = "";
public String getNovaDescricao() { return novaDescricao; }
public void setNovaDescricao(String novaDescricao) { this.novaDescricao = novaDescricao; }
public void setNovaMensagem(String novaMensagem){ this.novaMensagem = novaMensagem; }
public String getNovaMensagem(){ return this.novaMensagem; }
public void setNovoResumo(String novaCor){ this.novoResumo = novaCor; }
public String getNovoResumo(){ return this.novoResumo; }
public Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public MensagemUI() {
limpar();
}
public void limpar(){
mensagem = new Mensagem();
comentario = new Comentario();
}
public void inserir () {
MensagemModel model = new MensagemModel();
model.inserir(this.novaMensagem, this.novoResumo);
this.novaMensagem = "";
this.novoResumo = "";
}
public List <Mensagem> getLista () {
MensagemModel model = new MensagemModel();
return model.getMensagens();
}
public List<Mensagem> getMensagem (Long id) {
MensagemModel model = new MensagemModel();
return model.getMensagem(id);
}
public void setMensagem(Mensagem mensagem) {
this.mensagem = mensagem;
}
public Mensagem mensagem (){
return this.mensagem;
}
}
Messaging model:
public class MensagemModel {
private static EntityManagerFactory factory = null;
public void inserir (String novaMensagem, String novaCor) {
Mensagem f = new Mensagem();
EntityManager em = MensagemModel.getEM();
f.setNome(novaMensagem);
f.setCor(novaCor);
em.getTransaction().begin();
em.persist(f);
em.getTransaction().commit();
em.close();
}
@SuppressWarnings("unchecked")
public List <Mensagem> getMensagens () {
EntityManager em = MensagemModel.getEM();
List <Mensagem> lista = (List <Mensagem>) em.createQuery("SELECT f FROM mensagem f").getResultList();
em.close();
return lista;
}
private static EntityManager getEM () {
if (MensagemModel.factory == null)
MensagemModel.factory = Persistence.createEntityManagerFactory("persistence");
return MensagemModel.factory.createEntityManager();
}
@SuppressWarnings("unchecked")
public List <Mensagem> getMensagem(Long id) {
EntityManager em = MensagemModel.getEM();
List <Mensagem> lista = (List <Mensagem>) em.createQuery("SELECT f FROM mensagem f WHERE id=:id")
.setParameter("id", id)
.getResultList();
em.close();
return lista;
}
}
I don’t understand your note: @Onetomany(mappedBy="message"). What are you trying to do?
– Emir Marques
The idea is that a Message has several Comments. Therefore, I am trying to map the association.
– lokaum