JPA 2.0
Boa a tarde a todos,
Não sei como tratar uma questão ainda no meu sistema, que é a seguinte:
Tenho uma tabela no banco de dados que vou chamar de Tabela1 aqui, essa Tabela1 quando for inserir algo nela pelo persist do meu JPA 2.0 tenho que bloquear para ninguém mais poder alterar ou inserir algo nela porque meu sistema tem 1000 usuários que pode fazer a mesma coisa então só vou liberar a Tabela1 para leitura para os outros 999 usuários até eu terminar de inserir na Tabela1 com o persist JPA 2.0.
Minha pergunta é: como faço isso usando o JPA 2.0?
Regina
Curtidas 0
Respostas
Dyego Carmo
19/04/2010
em.lock();
Utilize Lock do tipo pessimista.
Utilize Lock do tipo pessimista.
GOSTEI 0
Regina
19/04/2010
em.lock();
Utilize Lock do tipo pessimista.
teria algum exemplo para refrescar minha memória...
Utilize Lock do tipo pessimista.
GOSTEI 0
Regina
19/04/2010
Pessoal preciso bloquear minha tabela não so uma linha, isso na hora da inserção mais usando persist do jpa 2.0 nada feito pelo banco de dados tudo programado dentro do java.
Tentei usar entityManager.lock() so que ele funciona para uma linha da tabela e tem que existir esse registro no banco já.
Meu caso é ao contrario, preciso bloquear toda a tabela e inserir um novo registro até agora não consegui alguém tem uma idéia ou ja tentou fazer isso????
lembrando: estou com glassfishV3, jpa2.0, hibernate, mysql e swing.
GOSTEI 0
Carlos Mazzi
19/04/2010
Criar um metodo que verifique se o usuario que esta logado é o ultimo que alterou a mesma, e ter um campo de "flag", que te da a interpretacao de todos travados menos o usuario "x".
Assim vc so precisaria verificar de codigo do usuario logado = codigo que permitiria na sua tabela.
GOSTEI 0
Dyego Carmo
19/04/2010
JPA não suporta isso
Voce terá que utilizar um recurso do banco para travar... e acessar este recurso utilizando uma query nativa.
ex no mysql:
em.createNativeQuery("LOCK TABLES MinhaTabela WRITE");
.... <codigo normal>
em.createNativeQuery("UNLOCK TABLES");
JPA 2.0 não encoraja isto e não suporta nativamente.... voce vai ter que recorrer ao banco.
Voce terá que utilizar um recurso do banco para travar... e acessar este recurso utilizando uma query nativa.
ex no mysql:
em.createNativeQuery("LOCK TABLES MinhaTabela WRITE");
.... <codigo normal>
em.createNativeQuery("UNLOCK TABLES");
JPA 2.0 não encoraja isto e não suporta nativamente.... voce vai ter que recorrer ao banco.
GOSTEI 0
Regina
19/04/2010
ja estava pensando nisso mesmo ate fiz uns teste com o exemplo que vc falou antes mesmo da sua resposta agora tenho certeza que a jpa2.0 não aceita.
Valeu Dyego.
GOSTEI 0
Dyego Carmo
19/04/2010
JPA não suporta LOCK em tabela inteira.
Voce terá que recorrer ao seu banco de dados.
Voce terá que recorrer ao seu banco de dados.
GOSTEI 0