3
respostas

Não estou conseguindo integrar o JPA com uma aplicação servlet

Aqui está o persistence.xml:

<?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="gerenciador-de-tarefas" 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/gerenciador_de_tarefas?createDatabaseIfNotExist=true"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password"
                      value="root"/>
            <property name="hibernate.dialect"
                      value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="create"/>

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

Vou deixar as pastas do projeto para ver se está no lugar correto:

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

A versão do TOMCAT:

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

3 respostas

Olá, Bruno!

Pelo que você compartilhou, seu arquivo persistence.xml parece estar correto e bem configurado. No entanto, a questão da integração do JPA com uma aplicação servlet pode ser um pouco mais complexa e envolver outros aspectos do seu projeto.

Um ponto que você pode verificar é se o arquivo persistence.xml está no local correto. Ele deve estar dentro de uma pasta chamada META-INF no classpath da sua aplicação. No seu caso, a estrutura de diretórios deveria ser algo como src/main/resources/META-INF/persistence.xml.

Outro ponto a ser verificado é se todas as dependências necessárias estão corretamente configuradas no seu arquivo pom.xml (se você estiver usando Maven) ou build.gradle (se estiver usando Gradle). Você precisará das dependências para o JPA, o Hibernate e o driver JDBC do MySQL.

Por último, é importante lembrar que o JPA funciona com o conceito de "Entity Managers", que são os responsáveis por gerenciar as entidades da sua aplicação. Para utilizar o JPA em uma aplicação servlet, você precisará criar um EntityManager em algum ponto do seu código. Aqui está um exemplo de como você pode fazer isso:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("gerenciador-de-tarefas");
EntityManager em = emf.createEntityManager();

Lembre-se de fechar o EntityManager e o EntityManagerFactory quando terminar de usá-los para evitar vazamentos de memória.

em.close();
emf.close();

Espero ter ajudado e bons estudos!

Como está o POM.xml:

<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>gerenciador-de-tarefas</groupId>
    <artifactId>gerenciador-de-tarefas</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
            <scope>provided</scope>
        </dependency>

        <!--
        https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.6.15.Final</version>
        </dependency>

        <dependency>
            <groupId>org.jetbrains</groupId>
            <artifactId>annotations</artifactId>
            <version>24.0.1</version>
            <scope>compile</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <release>20</release>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.3</version>
            </plugin>
        </plugins>
    </build>
</project>

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

Gostaria de saber se dessa forma ele vai criar o banco automaticamnete feito no curso fez ou usando o tomcat devo criar o banco manualmente?

Oi!

Funciona da mesma forma, mas como o Matheus respondeu, o problema está na localização do arquivo persistence.xml. Você criou ele na pasta META-INF dentro de webapp, mas na verdade deveria criar dentro de src/main/resources/META-INF.