2
respostas

unknown entity no Produto.java

Quando o hibernate chama o persist ele reclama um erro de unkown entity, nao sei o porue, mas a minha annotation de entity acima da classe Produto fica com um risco na palavra. o Codigo é este a seguir:

Produto.java:

package br.com.casadocodigo.loja.models;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.hibernate.annotations.Entity;

@SuppressWarnings("deprecation")
@Entity
public class Produto {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String titulo;
    private String descricao;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }


    private int paginas;


    public String getTitulo() {
        return titulo;
    }
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }
    public String getDescricao() {
        return descricao;
    }
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    public int getPaginas() {
        return paginas;
    }
    public void setPaginas(int paginas) {
        this.paginas = paginas;
    }


    @Override
    public String toString() {
        return "Produto [titulo=" + titulo + ", descricao=" + descricao + ", paginas=" + paginas + "]";
    }
}

ProdutoDAO.java:

package br.com.casadocodigo.loja.daos;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import br.com.casadocodigo.loja.models.Produto;


@Repository
@Transactional
public class ProdutoDAO {

    @PersistenceContext
    private EntityManager manager;

    public void gravar(Produto produto) {
        manager.persist(produto);
    }
}
2 respostas

Fala Marcelo, tudo bem ?

Quando o código fica riscado é porque estamos lidando com um recurso depracated (descontinuado) do framework, biblioteca, projeto, etc. É usado para indicar que você deve evitar o uso deste recurso, e buscar a solução padrão recomendado a partir de 'descontinuação' (em geral no Javadoc de um módulo marcado com deprecated mostra qual a solução adequada para se usar ao invés).

Vendo aqui o código percebo que o import para a Annotation Entity vem de org.hibernate.annotations.Entity. Nessa caso da implementação ORM (Hibernate) usada no projeto. Porém no caso do projeto (assim como recomendado) ao invés de usar diretamente código vindo do Hibernate, usamos a especificação JPA que baseia como todas as implementações ORM devem ser acessíveis para projetos que as utilizam. Veja que por exemplo as outras anotações vem de javax.persistence..., pacote base da especificação da JPA.

Tente mudar seu código para usar a Entity da especificação JPA, ao invés da implementação direta do Hibernate, trocando o import para:

//outros imports

import javax.persistence.Entity;

Espero ter ajudado. Abraço!

PS: Olhando a documentação (http://docs.jboss.org/hibernate/orm/5.2/javadocs/) da pra ver o motivo do recurso já estar presente como descontinuado e as recomendações de uso alternativo. Podemos seguir como uma regrinha sempre usar diretamente a especificação ao invés da implementação, para casos gerais.

Boa tarde Marcelo, o problema está no import da annotation, que deve ser do pacote import javax.persistence também.