Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Erro Usando MYSQL

Meu POM está assim:

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>br.com.alura</groupId>
  <artifactId>lojacursomaven</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>11</release>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.4.27.Final</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.32</version>
    </dependency>


</dependencies>
</project>

Meu persistence está assim:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="lojacursomaven" transaction-type="RESOURCE_LOCAL">
    <properties>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/lojacursomaven"/>
        <property name="javax.persistence.jdbc.user" value="root"/>
        <property name="javax.persistence.jdbc.password" value="root"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.hbm2ddl.auto" value="create"/>

    </properties>
</persistence-unit>
</persistence>

Classe produto assim:

package br.com.alura.loja.modelo;

import java.math.BigDecimal;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "produtos")
public class Produto {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nome;
    @Column(name="desc")
    private String descricao;
    private BigDecimal preco;


    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getDescricao() {
        return descricao;
    }
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    public BigDecimal getPreco() {
        return preco;
    }
    public void setPreco(BigDecimal preco) {
        this.preco = preco;
    }

}
5 respostas

Para testar, criei uma tabela produtos no banco de dados. Então, percebi que é feita a conexão e que o comando "Hibernate: drop table if exists produtos" é executado, pois a tabela que eu criei é deletada. Entretanto, o programa não cria uma nova tabela, conforme mensagem de erro abaixo:

 Hibernate: create table produtos (id bigint not null auto_increment, desc varchar(255), nome varchar(255), preco decimal(19,2), primary key (id)) engine=InnoDB
fev. 20, 2023 9:11:41 AM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@1cc680e] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
fev. 20, 2023 9:11:41 AM org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException
WARN: GenerationTarget encountered exception accepting command : Error executing DDL "create table produtos (id bigint not null auto_increment, desc varchar(255), nome varchar(255), preco decimal(19,2), primary key (id)) engine=InnoDB" via JDBC Statement
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table produtos (id bigint not null auto_increment, desc varchar(255), nome varchar(255), preco decimal(19,2), primary key (id)) engine=InnoDB" via JDBC Statement
...
Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc varchar(255), nome varchar(255), preco decimal(19,2), primary key (id)) eng' at line 1
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
...
Hibernate: insert into produtos (desc, nome, preco) values (?, ?, ?)
fev. 20, 2023 9:11:41 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1064, SQLState: 42000
fev. 20, 2023 9:11:41 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc, nome, preco) values ('Muito Legal', 'Xiaomi Redmi', 800.00)' at line 1
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute statementc
...
Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc, nome, preco) values ('Muito Legal', 'Xiaomi Redmi', 800.00)' at line 1
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)

Como resolver?

Realmente peguei o código que é gerado pra criar a tabela e colei no MySQL. Realmente tem erro de sintaxe. Isso ocorre devido a alguma property que foi colocada?

O código pra criação de tabela que o Eclipse gera é:

create table produtos (id bigint not null auto_increment, desc varchar(255), nome varchar(255), preco decimal(19,2), primary key (id)) engine=InnoDB

A mensagem que o MySQL dá é: ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc varchar(255), nome varchar(255), preco decimal(19,2), primary key (id)) eng' at line 1

Preciso alterar alguma property?

solução!

Revendo o vídeo anterior, referente à criação da classe Produto, percebi que o professor colocou a anotação @Column(name="desc") apenas para mostrar, mas a deletou. A permanência dessa anotação estava criando esse erro de sintaxe no SQL.

desc é palavra reservada do MySQL, por isso o erro.

Exatamente. É aquele tipo de coisa que a gente sabe mas esquece no "calor" do momento kkkkk

Valeu!