Erro PersistenceException

4 respostas
java
E

olá galera , estou com erro ao rodar uma aplicação não estou conseguindo entender o porque deste erro

segue o erro:

Exception in thread “main” java.lang.ExceptionInInitializerError
at BasicControlOs.ctrl.VeiculoController.(VeiculoController.java:19)
at BasicControlOs.testeDAO.NewClass.main(NewClass.java:20)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: BasicControlOsPU] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1225)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.access$600(EntityManagerFactoryBuilderImpl.java:119)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:853)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:399)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:73)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at BasicControlOs.dao.GenericDAO.(GenericDAO.java:25)
… 2 more
Caused by: org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: BasicControlOs.model.Veiculo.ordemServicoList
at org.hibernate.cfg.annotations.CollectionBinder.getCollectionBinder(CollectionBinder.java:330)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1919)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:963)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:796)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3790)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3744)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
… 10 more

Classe VeiculoController

public class VeiculoController {

private VeiculoDAO veiculoDAO;
private ObservableList<Veiculo> listaVeiculos;

public VeiculoController() {
    veiculoDAO = new VeiculoDAO();
  }

public void criarVeiculo(Veiculo veiculo) {
    try{
        veiculoDAO.beginTransaction();
        veiculoDAO.save(veiculo);
        veiculoDAO.commitAndCloseTransaction();
    }catch(Exception e) {
        e.printStackTrace();
    }
} 

public void editarVeiculo(Veiculo veiculo) {
    veiculoDAO.beginTransaction();
    veiculoDAO.update(veiculo);
    veiculoDAO.commitAndCloseTransaction();
}

public void removerVeiculo(Veiculo veiculo) {
    
}

public ObservableList<Veiculo> listaVeiculo() {
    veiculoDAO.beginTransaction();
    listaVeiculos = veiculoDAO.findAll();
    veiculoDAO.closeTransaction();
    return listaVeiculos;
}

}

Classe Veiculo

@Entity
@Table(name = “Veiculo”)
@XmlRootElement
@NamedQueries({
@NamedQuery(name = “Veiculo.findAll”, query = “SELECT v FROM Veiculo v”)})
public class Veiculo implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = “id_veiculo”)
private IntegerProperty idVeiculo;
@Basic(optional = false)
@Column(name = “modelo_veiculo”)
private StringProperty modeloVeiculo;
@Basic(optional = false)
@Column(name = “marca_veiculo”)
private StringProperty marcaVeiculo;
@Basic(optional = false)
@Column(name = “ano_veiculo”)
private IntegerProperty anoVeiculo;
@Basic(optional = false)
@Column(name = “cor_veiculo”)
private StringProperty corVeiculo;
@Basic(optional = false)
@Column(name = “km_veiculo”)
private DoubleProperty kmVeiculo;
@Basic(optional = false)
@Column(name = “placa_veiculo”)
private StringProperty placaVeiculo;
@Basic(optional = false)
@Column(name = “uf_veiculo”)
private StringProperty ufVeiculo;
@Basic(optional = false)
@Column(name = “nome_dono_veiculo”)
private StringProperty nomeDonoVeiculo;
@Basic(optional = false)
@Column(name = “cpf_dono_veiculo”)
private StringProperty cpfDonoVeiculo;
@OneToMany(cascade = CascadeType.ALL, mappedBy = “idVeiculo”)
private ObjectProperty ordemServicoList;

public Veiculo() {
}

public Veiculo(IntegerProperty idVeiculo) {
    this.idVeiculo = idVeiculo;
}

public Veiculo(Integer idVeiculo, String modeloVeiculo, String marcaVeiculo,Integer anoVeiculo, 
        String corVeiculo, Double kmVeiculo,String placaVeiculo, String ufVeiculo, 
        String nomeDonoVeiculo,String cpfDonoVeiculo) {
    this.idVeiculo = new SimpleIntegerProperty(idVeiculo);
    this.modeloVeiculo = new SimpleStringProperty(modeloVeiculo);
    this.marcaVeiculo = new SimpleStringProperty(marcaVeiculo);
    this.anoVeiculo = new SimpleIntegerProperty(anoVeiculo);
    this.corVeiculo = new SimpleStringProperty(corVeiculo);
    this.kmVeiculo = new SimpleDoubleProperty(kmVeiculo);
    this.placaVeiculo = new SimpleStringProperty(placaVeiculo);
    this.ufVeiculo = new SimpleStringProperty(ufVeiculo);
    this.nomeDonoVeiculo = new SimpleStringProperty(nomeDonoVeiculo);
    this.cpfDonoVeiculo = new SimpleStringProperty(cpfDonoVeiculo);
}

public IntegerProperty getIdVeiculo() {
    return idVeiculo;
}

public void setIdVeiculo(Integer idVeiculo) {
    this.idVeiculo.set(idVeiculo);
}

public StringProperty getModeloVeiculo() {
    return modeloVeiculo;
}

public void setModeloVeiculo(String modeloVeiculo) {
    this.modeloVeiculo.set(modeloVeiculo);
}

public StringProperty getMarcaVeiculo() {
    return marcaVeiculo;
}

public void setMarcaVeiculo(String marcaVeiculo) {
    this.marcaVeiculo.set(marcaVeiculo);
}

public IntegerProperty getAnoVeiculo() {
    return anoVeiculo;
}

public void setAnoVeiculo(int anoVeiculo) {
    this.anoVeiculo.set(anoVeiculo);
}

public StringProperty getCorVeiculo() {
    return corVeiculo;
}

public void setCorVeiculo(String corVeiculo) {
    this.corVeiculo.set(corVeiculo);
}

public DoubleProperty getKmVeiculo() {
    return kmVeiculo;
}

public void setKmVeiculo(double kmVeiculo) {
    this.kmVeiculo.set(kmVeiculo);
}

public StringProperty getPlacaVeiculo() {
    return placaVeiculo;
}

public void setPlacaVeiculo(String placaVeiculo) {
    this.placaVeiculo.set(placaVeiculo);
}

public StringProperty getUfVeiculo() {
    return ufVeiculo;
}

public void setUfVeiculo(String ufVeiculo) {
    this.ufVeiculo.set(ufVeiculo);
}

public StringProperty getNomeDonoVeiculo() {
    return nomeDonoVeiculo;
}

public void setNomeDonoVeiculo(String nomeDonoVeiculo) {
    this.nomeDonoVeiculo.set(nomeDonoVeiculo);
}

public StringProperty getCpfDonoVeiculo() {
    return cpfDonoVeiculo;
}

public void setCpfDonoVeiculo(String cpfDonoVeiculo) {
    this.cpfDonoVeiculo.set(cpfDonoVeiculo);
}

@XmlTransient
public ObjectProperty<OrdemServico> getOrdemServicoList() {
    return ordemServicoList;
}

public void setOrdemServicoList(OrdemServico ordemServicoList) {
    this.ordemServicoList.set(ordemServicoList);
}

VeiculoDAO

public class VeiculoDAO extends GenericDAO{
public VeiculoDAO() {
    super(Veiculo.class);
}

}

GenericDAO

public class GenericDAO implements Serializable {

private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("BasicControlOsPU");
private EntityManager em;
private final Class<T> entityClass;

public void beginTransaction(){
    em = emf.createEntityManager();
    em.getTransaction().begin();
}

public void commit() {
    em.getTransaction().commit();
}

public void closeTransaction() {
    em.close();
}

public void rollback() {
    em.getTransaction().rollback();
}

public void commitAndCloseTransaction() {
    commit();
    closeTransaction();
}

public void flush() {
    em.flush();
}

public void joinTransaction() {
    em = emf.createEntityManager();
    em.joinTransaction();
}

public GenericDAO(Class<T> entityClass) {
    this.entityClass = entityClass;
}

public void save(T entity) {
    em.persist(entity);
}

protected void delete(Object id , Class<T> classe) {
    T entityToBeRemoved = em.getReference(entityClass, id);
    em.remove(entityToBeRemoved);
}

public T update(T entity) {
    return em.merge(entity);
}

public T find(int entityId) {
    return em.find(entityClass, entityId);
}

public T findReferenceOnly(int entityId) {
    return em.getReference(entityClass , entityId);
}

public ObservableList<T> findAll() {
    CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
    cq.select(cq.from(entityClass));
    return (ObservableList<T>) em.createQuery(cq).getResultList();
}

}

4 Respostas

A

Você só pode fazer um mapeamento @OneToMany com atributos do tipo Collenction ou que herdem dessa classe, no seu model substitua isso:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "idVeiculo") private ObjectProperty ordemServicoList;

Por:

@OneToMany(cascade = CascadeType.ALL, mappedBy = "idVeiculo") private Collection<OrdemServico> ordemServicoList;

Ou seja o seu veículo possui uma lista de ordem de serviços associada a ele.
Espero ter ajudado.

E

Mas ObjectProperty e o tipo de dado que uso para que quando eu use a tableview do javafx os dados sejam obervable.

Estou usando IntegerProperty e StringProperty isso vai gerar erro tambem?

A

Não, você não entendeu você precisa de uma coleção quando usa @OneToMany (um para muitos) o ObjectProperty é uma classe que não estende de Collection.

E

Deu o mesmo erro agora com IntegerProperty

Criado 27 de janeiro de 2016
Ultima resposta 27 de jan. de 2016
Respostas 4
Participantes 2