Pessoal me ajuda, to apanhando muito com uma coisa, comecei com o hibernate a pouco tempo, e acho que não estou conseguindo configurar corretamente.
Tenho um arquivo que tem um método main, que funciona normalmente, faz persistencia se eu precisar ele retorna os dados, tudo certinho, o problema e quando tento fazer isso em uma página web usando JSF. É retornado o seguinte erro:
WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-/127.0.0.1:8080-2) #{testePersistenciaBean.inserir()}: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;: javax.faces.FacesException: #{testePersistenciaBean.inserir()}: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
Códigos seguem abaixo:
Classe Model
package puc.si.psi.ti.testes;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
*
* @author Wilton Garcia
*/
@Entity
@Table(name = "tb_teste_persistencia")
public class TestesPersistencia {
@Id
@GeneratedValue
private Integer idTeste;
private Integer randomValueTeste;
public Integer getIdTeste() {
return idTeste;
}
public void setIdTeste(Integer idTeste) {
this.idTeste = idTeste;
}
public Integer getRandomValueTeste() {
return randomValueTeste;
}
public void setRandomValueTeste(Integer randomValueTeste) {
this.randomValueTeste = randomValueTeste;
}
}
Arquivo com o método main, que funciona corretamente quando eu executo ele:
package puc.si.psi.ti.testes;
import java.util.Random;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
*
* @author Wilton Garcia
*/
public class ExecutaTestePersistencia {
public static void main(String[] args){
Random gerador = new Random();
TestesPersistencia tp = new TestesPersistencia();
tp.setRandomValueTeste(gerador.nextInt());
//Instancia a fabrica de conexões
SessionFactory factory = new Configuration().configure().buildSessionFactory();
//Abre a conexão com o banco de dados
Session session = factory.openSession();
//Começa o processo de transação
session.beginTransaction();
//Salva o estado do objeto atual
session.save(tp);
//Faz o commit dos dados para o banco
session.getTransaction().commit();
//Fecha a conexão com o banco de dados
session.close();
}
}
Bean, esse arquivo esta retornando o erro.
package puc.si.psi.ti.testes;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
*
* @author Wilton Garcia
*/
@ManagedBean
@RequestScoped
public class TestePersistenciaBean {
private TestesPersistencia tp = new TestesPersistencia();
public TestesPersistencia getTp() {
return tp;
}
public void setTp(TestesPersistencia tp) {
this.tp = tp;
}
public void inserir() {
//Abre a conexão com o banco de dados
SessionFactory factory = new Configuration().configure().buildSessionFactory();
//Abre a conexão com o banco de dados
Session session = factory.openSession();
//Começa o processo de transação
session.beginTransaction();
//Salva o estado do objeto atual
session.save(tp);
//Faz o commit dos dados para o banco
session.getTransaction().commit();
//Fecha a conexão com o banco de dados
session.close();
}
Página JSF que chama o arquivo:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<f:view contentType="text/html">
<h:head>
<f:facet name="first">
<meta content='text/html; charset=UTF-8' http-equiv="Content-Type"/>
<title>Inserir</title>
</f:facet>
</h:head>
<h:body>
<h:form>
<p:panelGrid columns="5">
<p:outputLabel value="Valor"/>
<p:inputText value="#{testePersistenciaBean.tp.randomValueTeste}"/>
<p:commandButton value="Inserir"
action="#{testePersistenciaBean.inserir()}"/>
</p:panelGrid>
</h:form>
</h:body>
</f:view>
</html>
Arquivo hibernate.cfg.xml (Sim, deixei create para ir fazendo testes)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Connection settings -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_tutorial_bd</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"/>
<!-- SQL dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!-- Print executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create all database on startup -->
<property name="hibernate.hbm2ddl.auto">create</property>
<!-- Annotated entity classes -->
<mapping class="puc.si.psi.ti.testes.TestesPersistencia"/>
</session-factory>
</hibernate-configuration>
Arquivo POM
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pucpsi</groupId>
<artifactId>pucpsi</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>pucpsi</name>
<properties>
<endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>6.1</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.2.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jboss.logging/jboss-logging -->
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.3.1.Final</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>8.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.11.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerArguments>
<endorseddirs>${endorsed.dir}</endorseddirs>
</compilerArguments>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>${endorsed.dir}</outputDirectory>
<silent>true</silent>
<artifactItems>
<artifactItem>
<groupId>javax</groupId>
<artifactId>javaee-endorsed-api</artifactId>
<version>6.0</version>
<type>jar</type>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.jboss.as.plugins</groupId>
<artifactId>jboss-as-maven-plugin</artifactId>
<version>7.9.Final</version>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<url>http://repository.primefaces.org/</url>
<id>PrimeFaces-maven-lib</id>
<layout>default</layout>
<name>Repository for library PrimeFaces-maven-lib</name>
</repository>
</repositories>
</project>
Já troquei a versão do hibernate para 4 e continua retornando o mesmo erro, troque para 3 e mudou o erro, mas queria uma coisa que funcionasse, pesquisando achei muita gente falando de conflito de jars, porém não achei nada conflitante, mas segue aqui a árvore de dependências.
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building pucpsi 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ pucpsi --- [INFO] pucpsi:pucpsi:war:1.0-SNAPSHOT [INFO] +- org.primefaces:primefaces:jar:6.1:compile [INFO] +- com.sun.faces:jsf-api:jar:2.2.15:compile [INFO] +- org.jboss.logging:jboss-logging:jar:3.3.1.Final:compile [INFO] +- javax:javaee-web-api:jar:8.0:provided [INFO] +- org.hibernate:hibernate-core:jar:5.2.11.Final:compile [INFO] | +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile [INFO] | +- org.javassist:javassist:jar:3.20.0-GA:compile [INFO] | +- antlr:antlr:jar:2.7.7:compile [INFO] | +- org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:jar:1.0.1.Final:compile [INFO] | +- org.jboss:jandex:jar:2.0.3.Final:compile [INFO] | +- com.fasterxml:classmate:jar:1.3.0:compile [INFO] | +- dom4j:dom4j:jar:1.6.1:compile [INFO] | | \- xml-apis:xml-apis:jar:1.0.b2:compile [INFO] | \- org.hibernate.common:hibernate-commons-annotations:jar:5.0.1.Final:compile [INFO] \- mysql:mysql-connector-java:jar:5.1.38:compile [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.799 s [INFO] Finished at: 2017-10-27T10:08:06-02:00 [INFO] Final Memory: 9M/153M [INFO] ------------------------------------------------------------------------
Estou usando o NetBeans 8.2, Jboss EAP 6.3, JDK 8, quem souber do que eu estou fazendo errado, ou se alguém tiver um projeto ai de exemplo ia me ajudas bastante.