{"id":28267111,"url":"https://github.com/randintn/hibernatejpaexamples","last_synced_at":"2025-08-20T18:22:10.671Z","repository":{"id":38377289,"uuid":"500246002","full_name":"RandintN/HibernateJPAExamples","owner":"RandintN","description":null,"archived":false,"fork":false,"pushed_at":"2022-06-21T04:28:13.000Z","size":8,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-19T01:37:20.491Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RandintN.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-06-06T00:34:53.000Z","updated_at":"2022-06-06T00:35:13.000Z","dependencies_parsed_at":"2022-08-25T02:12:11.480Z","dependency_job_id":null,"html_url":"https://github.com/RandintN/HibernateJPAExamples","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/RandintN/HibernateJPAExamples","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RandintN%2FHibernateJPAExamples","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RandintN%2FHibernateJPAExamples/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RandintN%2FHibernateJPAExamples/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RandintN%2FHibernateJPAExamples/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RandintN","download_url":"https://codeload.github.com/RandintN/HibernateJPAExamples/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RandintN%2FHibernateJPAExamples/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271362533,"owners_count":24746503,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-20T02:00:09.606Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-20T15:10:04.106Z","updated_at":"2025-08-20T18:22:10.666Z","avatar_url":"https://github.com/RandintN.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Introdução JPA e Hibernate\n\n## Sumário\n- [O que você vai aprender](#O-que-você-vai-aprender)\n- [Pré-requisitos](#Pré-requisitos)\n- [Visão geral sobre mapeamento objeto-relacional](#Visão-geral-sobre-mapeamento-objeto-relacional)\n- [JPA](#JPA)\n- [Criando uma aplicação simples](#Criando-uma-aplicação-simples)\n\n## O que você vai aprender\n- Visão geral sobre mapeamento objeto-relacional\n- Introdução ao JPA - Java Persistence API\n\n## Pré-requisitos\n\n- Lógica de programação\n- OO básica\n- BD básico\n\n## Visão geral sobre mapeamento objeto-relacional\n\n### Outros problemas que devem ser tratados:\n- Contexto de persistência (objetos que estão ou não atrelados a uma conexão em um dado momento)\n- Mapa de identidade (cache de objetos já carregados)\n- Carregamento tardio (lazy loading)\n- Outros\n\n## JPA\n\nJava Persistence API (JPA) é a especificação padrão da plataforma Java EE (pacote javax.persistence) para mapeamento objeto-relacional e persistência de dados.\n\nJPA é apenas uma especificação (JSR 338):\nhttp://download.oracle.com/otn-pub/jcp/persistence-2_1-fr-eval-spec/JavaPersistence.pdf\n\nPara trabalhar com JPA é preciso incluir no projeto uma implementação da API (ex: Hibernate).\n\nArquitetura de uma aplicação que utiliza JPA:\n\n### Principais classes:\n\n#### EntityManager\nhttps://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html\n\nUm objeto EntityManager encapsula uma conexão com a base de dados e serve para efetuar operações de acesso a dados (inserção, remoção, deleção, atualização) em entidades (clientes, produtos, pedidos, etc.) por ele monitoradas em um mesmo contexto de persistência.\n\nEscopo: tipicamente mantem-se uma instância única de EntityManager para cada thread do sistema (no caso de aplicações web, para cada requisição ao sistema). \n\n#### EntityManagerFactory\nhttps://docs.oracle.com/javaee/7/api/javax/persistence/EntityManagerFactory.html\n\nUm objeto EntityManagerFactory é utilizado para instanciar objetos EntityManager.\n\nEscopo: tipicamente mantem-se uma instância única de EntityManagerFactory para toda aplicação.\n\n## Criando uma aplicação simples\n\n### Passos\n\n#### Crie uma base de dados MySQL vazia\n- Instale o Xampp no seu computador\n- Inicie o Apache e o MySQL\n- No PhpMyAdmin, crie uma base de dados chamada \"aulajpa\"\n\n#### Crie um novo projeto Maven\n- File -\u003e New -\u003e Other -\u003e Maven Project\n- Create Simple Project -\u003e Next\n  - Group Id: com.educandoweb\n  - Artifact Id: aulajpamaven\n  -Finish\n\n#### Copie as classes Programa e Pessoa para o novo projeto\n\n```java\npackage domain;\n\nimport java.io.Serializable;\n\npublic class Pessoa implements Serializable {\n  private static final long serialVersionUID = 1L;\n\n  private Integer id;\n  private String nome;\n  private String email;\n\n  public Pessoa() {\n  }\n\n  public Pessoa(Integer id, String nome, String email) {\n    super();\n    this.id = id;\n    this.nome = nome;\n    this.email = email;\n  }\n\n  public Integer getId() {\n    return id;\n  }\n\n  public void setId(Integer id) {\n    this.id = id;\n  }\n\n  public String getNome() {\n    return nome;\n  }\n\n  public void setNome(String nome) {\n    this.nome = nome;\n  }\n\n  public String getEmail() {\n    return email;\n  }\n\n  public void setEmail(String email) {\n    this.email = email;\n  }\n\n  @Override\n  public String toString() {\n    return \"Pessoa [id=\" + id + \", nome=\" + nome + \", email=\" + email + \"]\";\n  }\n}\n```\n\n```java\npackage application;\n\nimport domain.Person;\nimport domain.Pessoa;\n\npublic class Programa {\n\n  public static void main(String[] args) {\n    Person p1 = new Person(1, \"Carlos da Silva\", \"carlos@gmail.com\");\n    Person p2 = new Person(2, \"Joaquim Torres\", \"joaquim@gmail.com\");\n    Person p3 = new Person(3, \"Ana Maria\", \"ana@gmail.com\");\n\n    System.out.println(p1);\n    System.out.println(p2);\n    System.out.println(p3);\n  }\n}\n```\n\n#### Atualize o Maven do projeto para Java 11\n- Edite o arquivo pom.xml\n- Inclua o conteúdo abaixo\n- Salve o projeto\n- Botão direito no projeto -\u003e Maven -\u003e Update Project\n\n```xml\n\u003cproperties\u003e\n\t\u003cmaven.compiler.source\u003e11\u003c/maven.compiler.source\u003e\n\t\u003cmaven.compiler.target\u003e11\u003c/maven.compiler.target\u003e\n\u003c/properties\u003e\n```\n\n#### Inclua as dependências Maven a serem baixadas:\n\n```xml\n\u003cdependencies\u003e\n\t\u003c!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core --\u003e\n\t\u003cdependency\u003e\n\t\t\u003cgroupId\u003eorg.hibernate\u003c/groupId\u003e\n\t\t\u003cartifactId\u003ehibernate-core\u003c/artifactId\u003e\n\t\t\u003cversion\u003e5.4.12.Final\u003c/version\u003e\n\t\u003c/dependency\u003e\n\n\t\u003c!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager --\u003e\n\t\u003cdependency\u003e\n\t\t\u003cgroupId\u003eorg.hibernate\u003c/groupId\u003e\n\t\t\u003cartifactId\u003ehibernate-entitymanager\u003c/artifactId\u003e\n\t\t\u003cversion\u003e5.4.12.Final\u003c/version\u003e\n\t\u003c/dependency\u003e\n\n\t\u003c!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --\u003e\n\t\u003cdependency\u003e\n\t\t\u003cgroupId\u003emysql\u003c/groupId\u003e\n\t\t\u003cartifactId\u003emysql-connector-java\u003c/artifactId\u003e\n\t\t\u003cversion\u003e8.0.19\u003c/version\u003e\n\t\u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\n\n#### Configure o JPA no seu projeto por meio do arquivo persistence.xml\n- Crie uma pasta \"META-INF\" a partir da pasta \"resources\"\n- Dentro da pasta META-INF crie um arquivo \"persistence.xml\"\n- Conteúdo do arquivo persistence.xml:\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cpersistence xmlns=\"http://xmlns.jcp.org/xml/ns/persistence\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://xmlns.jcp.org/xml/ns/persistence\n    http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd\"\n\tversion=\"2.1\"\u003e\n\n\t\u003cpersistence-unit name=\"exemplo-jpa\" transaction-type=\"RESOURCE_LOCAL\"\u003e\n\t\u003cproperties\u003e\n\t\t\u003cproperty name=\"javax.persistence.jdbc.url\"\n\t\t\tvalue=\"jdbc:mysql://localhost/aulajpa?useSSL=false\u0026amp;serverTimezone=UTC\" /\u003e\n\n\t\t\u003cproperty name=\"javax.persistence.jdbc.driver\" value=\"com.mysql.jdbc.Driver\" /\u003e\n\t\t\u003cproperty name=\"javax.persistence.jdbc.user\" value=\"root\" /\u003e\n\t\t\u003cproperty name=\"javax.persistence.jdbc.password\" value=\"\" /\u003e\n\n\t\t\u003cproperty name=\"hibernate.hbm2ddl.auto\" value=\"update\" /\u003e\n\n\t\t\u003c!-- https://docs.jboss.org/hibernate/orm/5.4/javadocs/org/hibernate/dialect/package-summary.html --\u003e\n\t\t\u003cproperty name=\"hibernate.dialect\" \tvalue=\"org.hibernate.dialect.MySQL8Dialect\" /\u003e\n\t\u003c/properties\u003e\n\t\u003c/persistence-unit\u003e\n\u003c/persistence\u003e\n```\n\n#### Inclua os MAPEAMENTOS na classe de domínio:\n\n```java\npackage domain;\n\nimport (...)\n\n@Entity\npublic class Pessoa implements Serializable {\n  private static final long serialVersionUID = 1L;\n\n  @Id\n  @GeneratedValue(strategy = GenerationType.IDENTITY)\n  private Integer id;\n\t(...)\n```\n\n#### Na classe \"Programa\" faça os testes (veja vídeo-aula).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frandintn%2Fhibernatejpaexamples","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frandintn%2Fhibernatejpaexamples","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frandintn%2Fhibernatejpaexamples/lists"}