Pegar connect do hibernate?

3 respostas
javahibernate
denisspitfire

Estou usando hibernate com Spring. Tem como pegar um connect do Hibernate?

Connection connection = null;        
GeradorRelatorioUtil geradorRelatorio = 
                      new GeradorRelatorioUtil(nome+".jasper", parametros, connection);

preciso de um connection para enviar em um método de relatorio do jasper.

3 Respostas

denisspitfire

achei esse link mas de onde vem o entitymanager?

link

ficou assim

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

SessionImplementor sessionImplementor = (SessionImplementor) session;

Connection conn = sessionImplementor.getJdbcConnectionAccess().obtainConnection();
GeradorRelatorioUtil geradorRelatorio = new GeradorRelatorioUtil(nome+".jasper", parametros, conn); `
denisspitfire

posso usar isso em uma util?

`@Repository
@Transactional
public class TemporaryMachineIdDao {

@PersistenceContext
private EntityManager manager;

public void gravar(TemporaryMachineId tempMachine){
	manager.persist(tempMachine);
}

}`

minha duvida é pelo @Repository e o @transactional.

Minha util nao faria isso.

o @PersistenceContext para obter o manager, só funciona se for @Repository e transactional?

terei problemas futuros com isso? tem uma maneira mais clean? Me parece gambiarra fazer uma util com isso

denisspitfire

se eu fizer isso como falado acima, da problema.

`Session session = manager.unwrap(Session.class);

SessionImplementor sessionImplementor = (SessionImplementor) session;

Connection conn = sessionImplementor.getJdbcConnectionAccess().obtainConnection();
GeradorRelatorioUtil geradorRelatorio = new GeradorRelatorioUtil(nome+".jasper", parametros, conn);
	geradorRelatorio.geraPDParaOutputStream(new FileOutputStream(nome+".pdf"));`

essa é a parte onde eu uso o conn.

aqui é onde eu declaro.

`@Controller
public class RelatorioController {

@Autowired
private HttpServletRequest request;

@Autowired
private TemporaryMachineIdDao tempMachineDao;

@PersistenceContext
private EntityManager manager;`

erro
java.lang.IllegalStateException: No transactional EntityManager available at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:265) at com.sun.proxy.$Proxy29.unwrap(Unknown Source) at com.ambra.report.controlls.RelatorioController.form(RelatorioController.java:87) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

Criado 29 de julho de 2016
Ultima resposta 29 de jul. de 2016
Respostas 3
Participantes 1