Arquivo da categoria: Programação

Como pegar a conexão usando JPA ou Hibernate

Eu passei por um problema que era usar a mesma conexão que eu usava no projeto para usar no meu relatório com o ireports.
Para resolver esse problema usei esse código.

public class ReportsRepository {
 
    private EntityManager entityManager;
 
    public ReportsRepository(EntityManager entityManager) {
        this.entityManager = entityManager;
    }
 
    public Connection getConnection() {
        try {
            EntityManagerImpl factory = (EntityManagerImpl) entityManager;
            SessionFactoryImpl sessionFactoryImpl = (SessionFactoryImpl) factory.getSession().getSessionFactory();
            return sessionFactoryImpl.getConnectionProvider().getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

@MappedSuperclass ou @Inheritance

Quando você usa a anotação @MappedSuperclass, quando gerar as tabelas ela não será gerada e sim as classes filhas dela exemplo:

@MappedSuperclass 
abstract class  Animal {}
 
@Entity
class Cao extends Animal {}
 
@Entity
class Gato extends Animal {}
 
@Entity
class Leao extends Animal {}

No banco as tabelas que vão ser criadas serão Cao, Gato e Leao. Caso você queira a a tabela de Animal sejá gerada então será preciso mudar a anotação para @Inheritance, que no caso tem três possíveis estratégias de mapeamento – INGLE TABLE, TABLE PER CLASS ou JOINED. Ficaria assim:

@Entity
@Inheritance(strategy = InheritanceType.JOINED) 
abstract class  Animal {}
 
@Entity
class Cao extends Animal {}
 
@Entity
class Gato extends Animal {}
 
@Entity
class Leao extends Animal {}