Boa tarde galera,
Estou tentando fazer um merge com JPA e estou levando os seguintes erros:
javax.persistence.RollbackException: Error while committing the transaction
org.hibernate.exception.SQLGrammarException: could not execute statement
org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63)
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘escola.tab_alunos’ doesn’t exist
Seguem as anotações da classe:
@Entity
@Table(name=“TAB_ALUNOS”)
@SequenceGenerator(name=“TAB_ALUNOS_PK”, sequenceName=“SEQ_ALUNOS_PK”, allocationSize=1)
public class Aluno {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="TAB_ALUNOS_PK")
private Long id;
@Column(length=10, nullable=false)
private String matricula;
@Column(length=100, nullable=false)
private String nome;
@Column(length=9 ,nullable=false)
private String sexo;
@Column(name="DATA_NASCIMENTO", length=10, nullable=false)
private String dataNascimento;
@Column(length=30, columnDefinition="DEFAULT 'Ativo'")
private String situacao;
Alguma sugestão do que poderia ser?
Esse nome de tabela existe? Rodou o select gerado pelo jpa direto na ferramenta do mysql?
Então, a tabela não existe, mas eu esperava que o JPA criasse ela pra mim.
Aqui o persistence.xml:
persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version=“2.0”>
<persistence-unit name="banco" transaction-type="RESOURCE_LOCAL">
<description>
Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide
</description>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>org.halyph.sessiondemo.Event</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/escola" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="fatima" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
Em relação a criar tabela pelo hibernate não posso te ajudar, nunca vi empresas sérias fazerem dessa forma.
O sistema está sendo desenvolvido pra um trabalho de faculdade
Entendo, normal faculdade pedir pra praticar o que não é usado nas grandes empresas. Aparentemente pela documentação, hibernate.hbm2ddl.auto está correto como update, o resto não sei, você pode esperar alguém que trabalhe dessa forma te responder ou criar um tópico específico sobre criação de tabela a partir do hibernate.
@MGenteluci Seu arquivo de persistencia está errado. Pessoalmente eu prefiro utilizar JPA com EclipseLink, Hibernate é muito lento e não funciona muito bem com EJB.
{
<persistence-unit name="banco" transaction-type="RESOURCE_LOCAL">
<description>
Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide
</description>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>org.halyph.sessiondemo.Event</class>
<!-- todas as classes que serão utilizadas pelo módulo de persistencia devem ser declaradas-->
<class>pacote.onde.fica.classe.Aluno</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/escola" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="fatima" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.show_sql" value="true" />
<!-- para criar as tabelas automaticamente use create durante o desenvolvimento é melhor usar create-drop -->
<property name="hibernate.hbm2ddl.auto" value="create" />
</properties>
}
Boa noite Villagram,
adicionei lá o
<class>model.Aluno</class>
e também tentei com o create e também o create-drop. Nada funcionou!!
Alguma outra idéia?
Posta o erro…você usa algum container para gerenciar seus beans?
O erro se manteve o mesmo, aquele que postei lá em cima.
Pra ser honesto eu não sei exatamente o que você quis dizer com gerenciador de beans, então provavelmente eu não uso.
Se você não sabe isso então quer dizer que você também não sabe o que é um EJB?
então troca o provider da sua aplicação para o eclipselink…pq o erro que está acontecendo é de que a tabela não existe no banco…ou você cria ela manualmente ou troca esse provider.
Infelizmente isso não resolveria meu problema, o trabalho da faculdade precisa ser feito com Hibernate JPA
Se eu criar as tabelas manualmente ele funciona, o que ele não consegue fazer é criar a tabela.
Esta com as permissões OK do user com o db?
Você precisa utilizar um arquivo de persistencia exato ou pode utilizar outro meio de configuração? O arquivo persistence.xml com este provider de hibernate não funciona muito bem com MySql…caso você puder é melhor utilizar o arquivo de configuração do próprio hibernate (hibernate.cfg.xml).
As permissões definidas no persistence.xml estão como de usuário root.
Atualizando o tópico, como vocês puderam ver lá em cima, ao mesmo que o hibernate deveria criar a tabela tab_alunos, ele também deve criar a seq_alunos_pk, e a sequência ele está criando, só o que não cria mesmo é a tabela.
Não sei se isso pode esclarecer algo pra vocês.
At.,
Ainda continuo com o problema, mas vim atualizar o tópico.
Criei um projeto diferente, em um banco diferente e de começo funcionou tudo ok, o hibernate criou as tabelas de boa então fui e deletei as tabelas direto no banco de dados. Depois disso o hibernate foi incapaz de criar as tabelas novamente.