Verificação padrão de um objeto do BD
15/09/2017 09:53
1
Bom dia a todos

Estou começando a usar o Spring Boot, e estou em um projeto um tanto grande. Nesse projeto ficou definido por padrão que qualquer objeto já persistido no BD será recuperado através do seu Id, e a maior parte desses objetos tem um atributo de status para verificar se ele esta ativo ou inativo. 
Já estou a 2 dias pesquisando a melhor forma de implementar algo que seja padrão, para sempre que recuperar um objeto do BD eu consiga verificar se ele existe e se esta ativo no BD.

Qualquer ajuda é muito bem vinda

Obgdo
Tags: spring-boot


0
Oi Cesar, 

não entendi seu problema: o que você quer na realidade é ter um mecanismo que sempre te retorne os registros do banco de dados cujo atributo publicado seja verdadeiro?
Se sim, se não me engano, há um recurso no próprio Hibernate que te permite reescrever as consultas de forma automática, similar ao que é usado no mecanismo de multi tenancia deste framework. Estou em trânsito neste momento, e não estou podendo escrever com muitos detalhes, mas vou procurar e assim que tiver um tempinho publico aqui para você, ok?

Mas se buscar por algo na direção da multi tenância (que não creio ser o seu caso), você encontra. Se não me engano, é algo tipo um interceptador (interceptor).


0
Olá Henrique

Eu tentei utilizar interceptor, mas não deu muito certo.

O que estou tentando implementar seria uma regra para sempre que eu recuperar um objeto do BD, isso será feito pelo Id, eu já verifico a existência desse objeto, e caso o objeto exista já verifico o atributo status, e caso o objeto não exista ou o status seja inativo, retorno uma mensagem para o usuário.
Já vou pesquisar sobre multi-tenância.

Obrigado pela ajuda
15/09/2017 15:47


0
Tem um ponto que não entendi Cesar:

quando você salva algo no banco de dados, ele já não gera um identificador para você? Sendo assim, qual seria o problema?


0
Eu vou detalhar melhor a situação.

Quando preciso emitir uma venda por exemplo, eu preciso dos produtos e de uma pessoa, esses objetos já estão persistidos no BD, e eu preciso verificar se os Ids que são passados na requisição existem de fato no BD e se o status desses objetos estão ativos. 
E essa situação para verificar a existência do Id e o valor do status, é uma ação que vou precisar repetir muitas vezes, com muitos objetos, por isso estou tentando tornar o mais genérico possível, e por já estar utilizando spring no projeto, não sei se tem alguma solução do próprio spring que poderia ser utilizada nessa situação.
18/09/2017 08:13


0
Oi Cesar,

entendi: bom, neste caso o que você poderia fazer, dado que todos tem o mesmo tipo de id, é implementar uma solução genérica usando HQL. Visto que você quer apenas saber da existência do registro, poderia montar um HQL que fosse mais ou menos similar ao pseudo código a seguir:

boolean existe(Long id, Class classe) {
   "select count(*) from [nome da classe] where id = [valor do id]"
}

Assim já teria uma solução genérica para o seu problema. Claro: você pode melhorar isto depois incluindo algum mecanismo de cacheamento para lhe ajudar a ter um desempenho melhor, pois ir ao banco de dados o tempo inteiro para checar a existência de registros que já existe não daria muito certo.

Outra alternativa é você usar o próprio data binding do Spring. No caso do Grails, por exemplo, fornecendo apenas o id na requisição (atributo.id sendo o nome do campo), automaticamente já é feita a busca pelo registro, e este é injetado no objeto que você vai definir o valor.


1
Muito obrigado pelas dicas.

Já estou testando para ver qual fica melhor

Um abraço Henrique
18/09/2017 09:44


0
Precisando é só chamar!



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails, Spring e mais com a Formação itexto!

Livro de Spring


/dev/All

Os melhores blogs de TI
em um único lugar!

 
Spring Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.