Open leandromoraesrj opened 2 years ago
Para a classe mapeada como herança, ao executar o método save, a classe pai também será persistida (automaticamente);
Para classe mapeada com muitos para muitos, todos os objetos deverão executar o método set, pois o método save não persiste em cascata e, cada um dos objetos novos, precisa executar seu próprio método save;
UnidadeEmpresarial unidade1 = new UnidadeEmpresarial();
Estabelecimento estab1 = new Estabelecimento();
Estabelecimento estab2 = new Estabelecimento();
estab1.setUnidadeEmpresarial(unidade1); estab2.setUnidadeEmpresarial(unidade1); unidade1.setEstabelecimentos(Arrays.asList(estab1, estab2));
unidadeService.save(unidade1); estabService.save(estab1); estabService.save(estab2);
- Para classe mapeada **com 1 para 1** com objeto de domínio, basta executar o **new dominio();** passando o **id**;
TipoUnidadeEstabelecimento tipoUnidade = new TipoUnidadeEstabelecimento(); tipoUnidade.setId(1);
estab1.setTipoUnidadeEstabelecimento(tipoUnidade);
- Para classe mapeada **com 1 para 1** usando **mapsid** (_onde o id dos 2 objetos são os mesmos e os objetos são novos_), basta executar o **save** do objeto principal que o objeto secundário será persistido também;
Estabelecimento estab1 = new Estabelecimento(); Inscricao inscricao1 = new Inscricao();
estab1.setInscricao(inscricao1); inscricao1.setEstabelecimento(estab1);
estabService.adicionarEstabelecimento(estab1);
**@QueryMethods, @NativeQuery e @Query**
@Repository public interface RegimeApuracaoRepository extends JpaRepository<RegimeApuracao, Integer> { // Query Methods Boolean existsByCodigo(Integer id);
Optional
List
List
List
findOneBy sempre resulta um getSingleResult(); findBy tem um comportamento diferente dependendo do tipo de retorno;
// Query
@Query("select distinct c from RegimeApuracao c where c.fim is null and (upper(c.nome) like upper(:nome) or c.codigo = :codigo) order by c.nome asc, c.codigo desc")
List
// QueryNativa
@Query(value = "select * from Regime_Apuracao c where c.dt_fim is null and c.no_regime_apuracao like ?1% order by c.no_regime_apuracao asc", nativeQuery = true)
List
@Transactional @Modifying @Query("delete from RegimeApuracao u where u.nome = ?1") void queryDeleteByName(String nome); }
@Modify só é relevante em combinação com a @Query.
É possível definir os parâmetros com **c.codigo = :codigo** ou **c.codigo = ?1** (_onde ?1 indica a posição do parâmetro_)
Não é possível fazer um @QueryMethods com base em um atributo @Transient:
public class Uf implements Serializable {
@Entity @Table(name = "UF") private static final long serialVersionUID = 1L;
@Id @Column(name = "SG_UF", length = 2) protected String sigla;
@Column(name = "CO_UF_CAD", nullable = false) protected Integer codigoCad;
@Transient protected Integer codigoIbge;
public Integer getCodigoIbge() { return codigoCad; }
Documentação com mais exemplos:
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods