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

ERRO USANDO O MYSQL!

Bom primeiramente acreditava que meu problema estava no importe, pois não aparecia a API do javax para import, somente do jakart. Adicionei o javax como dependência do maven e consegui utilizar suas classes.

O erro que estava dando era que não estava achando o database loja, estou usando o mysql.

Após trocar para javax o problema continuou o mesmo.

nov. 03, 2022 1:27:11 PM javax.persistence.spi.PersistenceProviderResolverHolder$DefaultPersistenceProviderResolver log
ADVERTÊNCIA: javax.persistence.spi::No valid providers found.
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named loja
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
    at br.com.robson.loja.testes.CadastroDeProduto.main(CadastroDeProduto.java:22)

Minha persistence.xml está assim:

`

<persistence-unit name="loja" 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/loja"/>
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="***********" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect" />
        <property name="hibernate.show.sql" value="true"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
</persistence-unit>
`
5 respostas

E o meu pom xml 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.robson</groupId>
  <artifactId>loja</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.10.1</version>
            <configuration>
                <release>17</release>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>6.1.5.Final</version>
    <type>pom</type>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.31</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.persistence/javax.persistence-api -->
<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>javax.persistence-api</artifactId>
    <version>2.2</version>
</dependency>


</dependencies>

</project>

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeO database foi criado!

Uso como sistema operacional o Ubuntu 22.04 e a versão do java é JDK17.

Preciso de uma solução pois já procurei bastante e não achei nada a esse respeito.

Por falta de atencão minha não coloquei como dependencia o hibernate-entityManager.

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>6.0.0.Alpha7</version>
    <type>pom</type>
</dependency>

Após inserir essa dependência consegui comunicar com o banco de dados, porém agora apareceu outro erro:

Exception in thread "main" java.lang.IllegalArgumentException: Unknown entity: br.com.robson.loja.modelo.Produto
    at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:706)
    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:689)
    at br.com.robson.loja.testes.CadastroDeProduto.main(CadastroDeProduto.java:27)

Minha classe Produto está assim:

package br.com.robson.loja.modelo;

import java.math.BigDecimal;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

@Entity // Esta anotação serve para mostrar que essa classe é uma entidade da JPA, ou
        // seja, se econtra no banco de dados;
@Table(name = "produtos") // QUANDO O NOME DA TABELA NÃO É IGUAL O NOME DA CLASSE

public class Produto {

    @Id // INFORMA QUE É CHAVE PRIMARIA "PRIMARY KEY"
    @GeneratedValue(strategy = GenerationType.IDENTITY) // PARA DIZER COMO O VALOR É GERADO, OU SEJA CONFORME O BANCO
                                                        // COM O AUTO_INCREMENT
    private Long id;
    private String nome;
    private String descricao;
    private BigDecimal preco;
solução!

Corrigi os imports, e ficou desta forma:

package br.com.robson.loja.modelo;

import java.math.BigDecimal;

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


@Entity // Esta anotação serve para mostrar que essa classe é uma entidade da JPA, ou
        // seja, se econtra no banco de dados;
@Table(name = "produtos") // QUANDO O NOME DA TABELA NÃO É IGUAL O NOME DA CLASSE

public class Produto {

    @Id // INFORMA QUE É CHAVE PRIMARIA "PRIMARY KEY"
    @GeneratedValue(strategy = GenerationType.IDENTITY) // PARA DIZER COMO O VALOR É GERADO, OU SEJA CONFORME O BANCO

Apesar de não ter dado uma excessão, não sei se a tabela foi criada, pois no console não mostra, esta foi a mensagem:

nov. 03, 2022 2:01:22 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [name: loja]
nov. 03, 2022 2:01:22 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate ORM core version 6.0.0.Alpha7
nov. 03, 2022 2:01:22 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using built-in connection pool (not intended for production use)
nov. 03, 2022 2:01:22 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: Loaded JDBC driver class: com.mysql.cj.jdbc.Driver
nov. 03, 2022 2:01:22 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001012: Connecting with JDBC URL [jdbc:mysql://localhost:3306/loja]
nov. 03, 2022 2:01:22 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {password=****, user=root}
nov. 03, 2022 2:01:22 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
nov. 03, 2022 2:01:22 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH10001115: Connection pool size: 20 (min=1)
nov. 03, 2022 2:01:23 PM org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl logSelectedDialect
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
nov. 03, 2022 2:01:23 PM org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl logSelectedDialect
WARN: HHH90000025: MySQL8Dialect has been deprecated; use org.hibernate.dialect.MySQLDialect instead
nov. 03, 2022 2:01:23 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@1a0c5e9] 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.
nov. 03, 2022 2:01:23 PM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]

Ao analisar o banco pelo terminal, identifiquei que a tabela foi criada bem como seus atributos. Rodei duas vezes a aplicação, e o mesmo atributo foi adcionado duas vezes, não sei se mais pra frente neste curso será falado, mas acredito que não devemos ter dados iguais no banco.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade