Recursos Somente Leitura (Views JPA / @Immutable)

Recursos Somente Leitura (Views JPA / @Immutable)

Acelere telas baseadas em Views do banco (ou entidades marcadas como @Immutable) com o modo read‑only do Starter.

Endpoints disponíveis (read‑only)

Bloqueadas: POST /, PUT /{id}, DELETE /{id}, DELETE /batch405.

Como usar

1) Entidade (View/@Immutable)

import org.hibernate.annotations.Immutable;

@Entity @Immutable
@Table(name = "vw_vendas_resumo")
public class VendaResumo { /* campos da view */ }

2) Repository

public interface VendaResumoRepository extends BaseCrudRepository<VendaResumo, Long> { }

3) Service read‑only

@Service
public class VendaResumoService extends AbstractReadOnlyService<VendaResumo, VendaResumoDTO, Long, VendaResumoFilterDTO> {
  public VendaResumoService(VendaResumoRepository repo) { super(repo, VendaResumo.class); }
}

4) Controller read‑only

@ApiResource("/api/relatorios/vendas-resumo")
@ApiGroup("relatorios")
@RestController
public class VendaResumoController extends AbstractReadOnlyController<
    VendaResumo, VendaResumoDTO, Long, VendaResumoFilterDTO> {

  @Autowired private VendaResumoService service;
  @Override protected BaseCrudService<VendaResumo, VendaResumoDTO, Long, VendaResumoFilterDTO> getService() { return service; }
  @Override protected Long getEntityId(VendaResumo e) { return e.getId(); }
  @Override protected Long getDtoId(VendaResumoDTO d) { return d.getId(); }
  @Override protected VendaResumoDTO toDto(VendaResumo e) { /* map */ }
  @Override protected VendaResumo toEntity(VendaResumoDTO d) { /* map */ }
}

5) Filtros e ordenação

6) Semantica de display/read-only

Recursos read-only tambem participam do contrato canonico de apresentacao de valor.

Diretrizes:

Isso garante que superficies read-only e metadata-driven consumam a mesma semantica horizontal de exibicao, sem depender apenas de heuristicas locais do frontend.

Benefícios (prontos para produção)
Referências