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;
    }
}

Share and Enjoy !

0Shares
0 0

@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 {}

Share and Enjoy !

0Shares
0 0