Estou iniciando a implementação de um projeto Java utilizando na camada de persistência com JPA e Hibernate.
Estou com um erro que não estou conseguindo resolver. Veja se pode me dar uma ajuda.
Como disse no curso, sou iniciante em Java e vou precisar de muita ajuda.
Além da Exception que está ocorrendo, não consigo entender o porque de na console referenciar classes Entity não mapeadas no persistence.xml.
O persistence.xml foi alterado. Tenho uma desconfiança que esta alteração não foi refletida no build path do projeto.
Estou usando o Tomcat. Como faço para atualizar o build path com a nova versão do persistence.xml. Isto não deveria ser automático ?
1 - Saída da Console
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Projetos/Java/Eclipse/confeccao/WebContent/WEB-INF/lib/slf4j-log4j12-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Projetos/Java/Eclipse/confeccao/WebContent/WEB-INF/lib/weld-servlet.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See <a href="http://www.slf4j.org/codes.html#multiple_bindings">http://www.slf4j.org/codes.html#multiple_bindings</a> for an explanation.
07:31:56 INFO [Version ] Hibernate Annotations 3.5.0-CR-2
07:31:56 INFO [Environment ] Hibernate 3.5.0-CR-2
07:31:56 INFO [Environment ] hibernate.properties not found
07:31:56 INFO [Environment ] Bytecode provider name : javassist
07:31:56 INFO [Environment ] using JDK 1.4 java.sql.Timestamp handling
07:31:56 INFO [Version ] Hibernate Commons Annotations 3.2.0-SNAPSHOT
07:31:56 INFO [Version ] Hibernate EntityManager 3.5.0-CR-2
07:31:57 INFO [AnnotationBinder ] Binding entity from annotated class: br.com.marcosoliveira.confeccao.financas.modelo.ContaMaior
07:31:57 INFO [EntityBinder ] Bind entity br.com.marcosoliveira.confeccao.financas.modelo.ContaMaior on table ContaMaior
07:31:57 INFO [AnnotationBinder ] Binding entity from annotated class: br.com.marcosoliveira.confeccao.financas.modelo.ContaProdutoBanco
07:31:57 INFO [EntityBinder ] Bind entity br.com.marcosoliveira.confeccao.financas.modelo.ContaProdutoBanco on table ContaProdutoBanco
07:31:57 INFO [AnnotationBinder ] Binding entity from annotated class: br.com.marcosoliveira.confeccao.financas.modelo.ChequeEspecial
Exception in thread “main” java.lang.ExceptionInInitializerError
at br.com.marcosoliveira.confeccao.teste.TestaAdicionaContaMaior.main(TestaAdicionaContaMaior.java:13)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: modulofinanceiro] Unable to configure EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:372)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
at br.com.marcosoliveira.confeccao.financas.Util.JPAUtil.(JPAUtil.java:19)
… 1 more
Caused by: java.lang.ClassCastException: org.hibernate.mapping.SingleTableSubclass cannot be cast to org.hibernate.mapping.RootClass
at org.hibernate.cfg.annotations.PropertyBinder.bind(PropertyBinder.java:209)
at org.hibernate.cfg.annotations.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:200)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1885)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:738)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:702)
at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:631)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:352)
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1206)
at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1416)
at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:193)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1044)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:276)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:360)
… 5 more
2 - Arquivo Persistence.xml
<persistence-unit name="modulofinanceiro">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>br.com.marcosoliveira.confeccao.financas.modelo.ContaMaior</class>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
<property name="hibernate.format_sql" value="true"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/bancoconfeccao"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.peristence.jdbc.password" value=""/>
</properties>
</persistence-unit>
3 - Implementação da Classe com Método Main
package br.com.marcosoliveira.confeccao.teste;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import br.com.marcosoliveira.confeccao.financas.DAO.ContaMaiorDAO;
import br.com.marcosoliveira.confeccao.financas.Util.JPAUtil;
import br.com.marcosoliveira.confeccao.financas.modelo.ContaMaior;
public class TestaAdicionaContaMaior {
public static void main(String[] args) {
EntityManager entityManager = new JPAUtil().getEntityManager();
ContaMaiorDAO contaMaiorDAO = new ContaMaiorDAO(entityManager);
ContaMaior contaMaior = new ContaMaior();
contaMaior.setCodigoContaMaior("CF");
contaMaior.setDescricaoContaMaior("Custo Fixo");
entityManager.getTransaction().begin();
entityManager.persist(contaMaior);
entityManager.getTransaction().commit();
System.out.println("Conta Maior gravada com sucesso");
entityManager.close();
}
}