JPA questão de concorrência "No lançamento do lote ainda continha declarações JDBC"

Chris Williams:

Eu tenho aa questão de concorrência I tentou resolver com um loop while que tenta salvar uma entidade várias vezes até que ela atinge alguns contagem de repetições max. Eu gostaria de evitar falar sobre se deve ou não existem outras maneiras de resolver esse problema. Eu tenho outras mensagens StackOverflow sobre isso. :) É uma longa história curta: existe uma restrição exclusiva em uma coluna que é derivada e incluir uma parte numérica que continua incrementando para evitar colisão. Em um loop, I:

  1. seleccionar máx (some_value)
  2. incrementar o resultado
  3. tentar salvar nova objecto com esta nova resultado
  4. liberar explicitamente a entidade e, se isso falhar por causa do o índice exclusivo, eu pegar um DataAccessException.

Tudo isso parece trabalho, exceto quando o loop volta para o passo 1 e tentativas para seleccionar, eu recebo:

17:20:46,111 INFO  [org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl] (http-localhost/127.0.0.1:8080-3) HHH000010: On release of batch it still contained JDBC statements
17:20:46,111 INFO  [my.Class] (http-localhost/127.0.0.1:8080-3) MESSAGE="Failed to save to database. Will retry (retry count now at: 9) Exception: could not execute statement; SQL [n/a]; constraint [SCHEMA_NAME.UNIQUE_CONSTRAINT_NAME]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement"

E uma nova exceção é capturado. Parece que o primeiro rubor que causa a violação de restrição único e lança o DataAccessExceptionnão limpa lote do gerente entidade. Qual a maneira apropriada de lidar com isso? Estou usando Spring com JPA e não têm acesso direto ao gerente entidade. Acho que poderia injetar se eu precisar, mas isso é uma solução dolorosa para esse problemas.

ParanoidAndroid:

Não pode fazer isso - uma vez que lave algo e ele falhar e uma exceção é lançada, a transação será marcada como retrocesso. Isso significa que não importa que você pegar a exceção e continuar, você vai acabar com a reversão. Na verdade ele não importa em tudo o que exceção foi lançada - pelo gerente de transação padrão de Primavera irá reverter em cada desmarcada exceções. Você pode superá-lo, definindo especificamente um noRollbackForna @Transactionalanotação (desde que você estiver usando transações motorista anotação)

Edit - Também não irá ajudá-lo no caso de esta violação de restrição, pois a operação será provavelmente marcada como reversão no nível da base de dados.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Concorrência Java: O que leva à insegurança na publicação de objetos?

O que significa exatamente o termo "agnóstico de concorrência"?

Controle de Concorrência Distribuído

Qual é o problema de concorrência mais frequente que você encontrou em Java?

HDF5 - concorrência, compressão e desempenho de E / S

Alguma sugestão de um programa ou pequeno projeto para aprender sobre concorrência em Java?

Como você chama esse tipo de classe relacionada à concorrência? E existe uma implementação padrão?

Referência de objeto Java / questão de escopo

JPA: questão sobre incompatibilidade de impedância nas relações OneToMany

Mapas Go falham no teste de concorrência

Mapas Go falham no teste de concorrência

Go: Concorrência e ordem de prioridade

Go: Concorrência e ordem de prioridade

Spring MVC: Validação, Post-Redirect-Get, Atualizações Parciais, Concorrência Otimista, Segurança de Campo

Concorrência de estresse de soquete Python

Como o maxConcurrentOperationCount do NSURLSession delegateQueue afeta a concorrência de tarefas

Os incrementos com gatilhos Postgres atômicos e de alta concorrência são seguros?

Os incrementos com gatilhos Postgres atômicos e de alta concorrência são seguros?

Referência circular - questão de arquitetura

Referência circular - questão de arquitetura

Concorrência de leitura e gravação

Como executar alguns conjuntos de teste com concorrência e resto sem concorrência usando TestCafe?

Node.js, coflitos de transação em PostgreSQL, controle de concorrência otimista e novas tentativas de transação

Concorrência CoreData e objetos de liberação

Lei de Amdahl em "Concorrência C ++ em Ação"

Concorrência Java com objetos armazenados no banco de dados

Concorrência de integração de Spring de ServiceActivators

Usando `DispatchGroup` ou alguma construção de concorrência para carregar dados e preencher células em` UITableViewController` sequencialmente

O servidor não está desligando normalmente devido a imperícia de concorrência

TOP lista

quentelabel

Arquivo