sexta-feira, 13 de dezembro de 2019

JPA - Java Persistence API




JPA


Entidades

Obrigatórios os métodos getters, setters, hashcode, equals e um construtor sem argumentos.

Anotações

@Entity - anota uma classe.
@Table - define o nome da tabela.
@Id - define um campo chave.
@GeneratedValue - autonumeração (@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column - Propriedades da coluna (@Column(name=”nome”, length = 60, nullable = false))
@Enumerated - Define um campo ENUM (@Enumerated(EnumType.STRING))
@Temporal - Define campo data (@Temporal(TemporalType.DATE))
@ManyToOne - Tipo de relacionamento entre tabelas (@ManyToOne(optional = false))
@JoinColumn -Nome da coluna do relacionamento (@JoinColumn(name = "entidade_id"))

Exemplo:
@Entity
@Table(name = "tbContato")
public class Contato {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Integer id;
   @Column(nullable = false)
   private String name;
   private String email;
   private String phone;
   @Column(nullable = false, insertable = false, updatable = true)
   private Boolean status;
   @Temporal(TemporalType.TIMESTAMP)
   @Column(nullable = false, insertable = false, updatable = false)
   private Date registrationDate;

persistence.xml

O arquivo persistence.xml deve ficar na pasta src/main/resources/META-INF, é criado automaticamente ao adicionar o Project Faces: JPA.

Configuração de uma conexão com o MySql no persistence.xml



<persistence-unit name="ProjetoPU">
   <provider>org.hibernate.ejb.HibernatePersistence</provider>
   <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/banco" />
      <property name="javax.persistence.jdbc.user" value="usuario" />
      <property name="javax.persistence.jdbc.password" value="senha" />
      <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" />
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
      <property name="hibernate.show_sql" value="true" />
      <property name="hibernate.format_sql" value="true" />
      <property name="hibernate.hbm2ddl.auto" value="update" />
   </properties>
</persistence-unit>

Gerar tabelas no banco

import javax.persistence.Persistence;
public class CriaTabelas {
   public static void main(String[] args) {
      Persistence.createEntityManagerFactory("ProjetoPU");
   }
}


Classe responsável por fornecer uma instância do EntityManager:

package util;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class JPAUtil {
   private static final Logger LOGGER = LogManager.getLogger(JPAUtil.class.getName());

   private static EntityManagerFactory factory;
   static {
      LOGGER.info("Criando um objeto factory de testJPAPU.");
      factory = Persistence.createEntityManagerFactory("testJPAPU");
   }
   public static EntityManager getEntityManager() {
      LOGGER.info("Objeto factory retornando uma instância de EntityManager.");
      return factory.createEntityManager();
   }
   public static void close() {
      LOGGER.info("Fechando o objeto factory.");
      factory.close();
   }
}

Nenhum comentário:

Postar um comentário