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

@Entity não cria tabela

A anotação @Entity não está criando tabela no meu banco de dados.

Primeiro, baixei a biblioteca java persistence (neste link: http://www.java2s.com/Code/Jar/j/Downloadjavaxpersistencejar.htm) e importei no projeto

Depois criei o database: ridge_mudi via terminal

Minha classe pedido:

package br.com.mvc.RidgeMudi.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.Table;
import java.math.BigDecimal;
import java.time.LocalDate;

@Entity
@Table(name = "tbl_order")
public class Pedido {

    @Id @GeneratedValue(strategy = javax.persistence.GenerationType.IDENTITY)
    private Long id;

    @Column(name = "col_name")
    private String nomeProduto;

    @Column (name = "col_price")
    private BigDecimal valorNegociado;

    @Column (name = "col_description")
    private String descricao;

    @Column (name = "col_delivery")
    private LocalDate dataDaEntrega;

    @Column (name = "col_product_url")
    private String urlProduto;

    @Column (name = "col_image_url")
    private String urlImagem;


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNomeProduto() {
        return nomeProduto;
    }

    public void setNomeProduto(String nomeProduto) {
        this.nomeProduto = nomeProduto;
    }

    public BigDecimal getValorNegociado() {
        return valorNegociado;
    }

    public void setValorNegociado(BigDecimal valorNegociado) {
        this.valorNegociado = valorNegociado;
    }

    public LocalDate getDataDaEntrega() {
        return dataDaEntrega;
    }

    public void setDataDaEntrega(LocalDate dataDaEntrega) {
        this.dataDaEntrega = dataDaEntrega;
    }

    public String getUrlProduto() {
        return urlProduto;
    }

    public void setUrlProduto(String urlProduto) {
        this.urlProduto = urlProduto;
    }

    public String getUrlImagem() {
        return urlImagem;
    }

    public void setUrlImagem(String urlImagem) {
        this.urlImagem = urlImagem;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
}

Meu pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>br.com.mvc</groupId>
    <artifactId>RidgeMudi</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>RidgeMudi</name>
    <description>Spring MVC Project</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Meu properties:

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/ridge_mudi
spring.datasource.username=root
spring.datasource.password=(minha_senha)

No Heidi, eu atualizo o database e não aparece nada, no terminal eu dou o comando show tables; e apenas aparece Empty set (0.00 sec) na saída. ALguém pode me ajudar por favor?

5 respostas

Tenta usar spring.jpa.hibernate.ddl-auto=create-drop

Não sei se pode ser o seu caso mas lembro que uma vez precisei adicionar o timezone na conexão.

Tenta //localhost:3306/ridge_mudi?serverTimezone=America/Sao_Paulo

solução!

Então José, consegui resolver agora de outra forma:

1) Recriei o projeto, mas desta vez já adicionando o JPA e o Driver logo no começo, no initializr. Fiz isso porque quando eu copiei e colei aquele trecho da dependência do JPA e do Driver, o JPA não foi adicionado ao meu projeto, fazendo com que eu tivesse que baixar e importar algum outro JPA.

2) No meio deste caminho tive um problema (absolutamente do nada) de timezone. Pesquisando no google achei a solução, colocando esse trecho de código: ?useTimezone=true&serverTimezone=UTC no final do meu datasource, deixando-o assim: spring.datasource.url=jdbc:mysql://localhost:3306/ridge_mudi?useTimezone=true&serverTimezone=UTC

3) Ainda no meu properties, coloquei esse trecho de código spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver porque não o IntelliJ não estava achando o meu driver.

No final, meu properties ficou desta forma:

spring.datasource.url=jdbc:mysql://localhost:3306/nome_database?useTimezone=true&serverTimezone=UTC
spring.datasource.username=user
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

E meu pom.xml, sem diferença ficou desta forma:

` 4.0.0 org.springframework.boot spring-boot-starter-parent 2.4.2 br.com.mvc gumudi 0.0.1-SNAPSHOT gumudi Demo project for Spring Boot <java.version>1.8</java.version> org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-web

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
```

Muito obrigado pela atenção José, Abraços!

Show de bola, realmente tava faltando o driver no properties. Só verifica o Timezone, o seu está o tempo universal, fuso horário zero, vai dar diferença.

Arrumado, obrigado José!