Jasper com JPA

Olá Senhores,

hoje eu to com um problema que infelizmente nem sei se tem solução visto que já procurei bastante e apesar de já ter testado duas formas todas foram sem sucesso, mais é o seguinte eu não tenho uma conexão jdbc , estou com um aplicativo simples em Java Swing e usando JPA com Hibernate e os relatórios Jasper feitos com queryString ou seja a consulta nativa e na IDE do Jasper o mesmo foi construido com a conexao jdbc mais estes relatórios são compartilhados por duas soluções e por este motivo eu não posso alterar o mesmo.
O problema esta em como obter uma conexão usando JPA? eu ja tentei como disse duas abordagens e infelizmente deu erro

Estou fazendo desta forma
Session session = this.entityManager.unwrap(Session.class);
gerador.openReport(“Listagem de usuários”, session.connection());

Saberias se existe outra forma?

Agora estou fazendo umas alterações e vou colocar os codigos aqui

GeradorRelatorio gerador = new GeradorRelatorio("RelFR_Usuario.jasper",
            parametros, "Usuarios.pdf");

    Session session = this.entityManager.unwrap(Session.class);

    if (session.isConnected()) {
        System.out.println("Conectado");
    } else {
        System.out.println("Não Conectado");
    }
    try {
        //session.doWork(gerador);
        gerador.openReport("Listagem de usuários", session.connection());
        /*try {
        session = this.entityManager.unwrap(Session.class);
        session.doWork(gerador);
        } catch (Exception ex) {
        JOptionPane.showMessageDialog(this, "Ocorreu um erro ao imprimir o relatório.\n." + ex.getMessage(), "Aviso do Sistema", JOptionPane.ERROR_MESSAGE);
        }*/
    } catch (JRException ex) {
        JOptionPane.showMessageDialog(this, "Ocorreu um erro ao imprimir o relatório.\n." + ex.getMessage(), "Aviso do Sistema", JOptionPane.ERROR_MESSAGE);
    }


class GeradorRelatorio {

private String caminhoRelatorio;
private Map<String, Object> parametros;
private boolean relatorioGerado;
private String report_dir = Constantes.REPORT_DIR;

public GeradorRelatorio(String relatorio, Map<String, Object> parametros, String nomeArquivoSaida) {
    this.caminhoRelatorio = report_dir + relatorio;
    this.parametros = parametros;

    this.parametros.put(JRParameter.REPORT_LOCALE, new Locale("pt", "BR"));
}

public void openReport(
        String titulo,
        Connection conn) throws JRException {
    
    String fileNameWithouthExtension = FilenameUtils.removeExtension(this.caminhoRelatorio);

    String jrxmlFile = fileNameWithouthExtension + ".jrxml";
    File file = new File(jrxmlFile);
    
    if (file.exists()) {
        JasperCompileManager.compileReportToFile(jrxmlFile.toString(), this.caminhoRelatorio);
    }
    
    JasperPrint print = JasperFillManager.fillReport(this.caminhoRelatorio, this.parametros, conn);
    this.relatorioGerado = print.getPages().size() > 0;
    
    // abre o JasperPrint em um JFrame
    viewReportFrame( titulo, print );
    
}

E qual erro deu?

Olá boa tarde!

Prezado o erro é este ( se bem que agora estou alterando novamente a classe )

[AWT-EventQueue-0] WARN org.hibernate.util.JDBCExceptionReporter - SQL 
Error: 0, SQLState: null
8780 [AWT-EventQueue-0] ERROR org.hibernate.util.JDBCExceptionReporter - 
Erro ao executar relatório /relatorios/RelFR_Usuario.jasper
Exception in thread "AWT-EventQueue-0" 
org.hibernate.exception.GenericJDBCException: error executing work
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)

at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
at org.hibernate.impl.SessionImpl.doWork(SessionImpl.java:2001)
at br.com.dominio.view.FrmReportUsuario.imprime(FrmReportUsuario.java:122)

Verifica seu arquivo .jasper pra ver se não estar passando algum field diferente. tipo: associou uma data a um outro campo com formato diferente.

Olá Vinicius bom dia!

Sim meu caro tinha realmente um problema no jrxml da forma como eu o fiz, vamos a solução então

Primeiro - havia um erro no meu jrxml eu havia colocado um Parâmetro Pwhere do tipo string e a minha query por exemplo era a seguinte

Select <Lista dos campos> From <Tabela> Where 1 = 1 $P!{Pwhere}

como eu não estava passando este parâmetro ele era nulo e no momento de executar a query havia um erro o que eu resolvi dando um default para este ( para o caso de eu não enviar nenhum pela aplicação ).

Segundo - sobre a conexão já que eu estou usando JPA com Hibernate eu peguei uma classe que me ajudou nesta questão no Blog do Armando Couto

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) {
       }
       return null;
}