Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

JpaRepository - Dúvida

Bom dia.

Na interface que estende JpaRepository é passado a classe é o tipo do atributo ID (<Topico, Long>).

Como fazer se a tabela do banco tem chave composta, ou seja, para comporta a chave primaria são necessários dois valores. Ex.: COD_EMPRESA = 1 e NUMERO_ORDEM = 10.

Obrigado!

2 respostas
solução!

Oi Tiago. Muito pertinente sua dúvida.

Pense nesse exemplo. Tendo uma classe com uma chave composta:

@Entity
@Table(name = "employees")
public class Employee implements Serializable {

    @EmbeddedId
    private EmployeeId employeeId;

    private String name;
    @Column(unique = true)
    private String email;
    private String phoneNumber;

    public Employee() {
    }

Para esse relacionamento usando Spring Data JPA, você precisa criar uma classe de chave primária composta separadamente com a anotação @Embeddable, assim:

@Embeddable
public class EmployeeId implements Serializable {

    @Column(name = "employee_id")
    private Long employeeId;

    @Column(name = "department_id")
    private Long departmentId;

    public EmployeeId() {
    }

    public EmployeeId(Long employeeId, Long departmentId) {
        this.employeeId = employeeId;
        this.departmentId = departmentId;
    }

Então sua interface JpaRepository fica assim:

public interface EmployeeRepository extends JpaRepository<Employee, EmployeeId> {

    // TODO: add queries
}

Pense que Long também é um objeto, então basta que minha chave composta seja um objeto também, nesse caso EmployeeId, que eu possa usar na minha Repository.

Para entender melhor leia esse artigo aqui

@viniciuscipolli Obrigado!