1
resposta

[Dúvida] Atividade:

Considere o seguinte mapeamento:


@Entity
public class Usuario {

    @Embedded
    private UsuarioId id;

// outra classe

@Embeddable
public class UsuarioId implements Serializable {

    private static final long serialVersionUID = 1L;

    private String nome;
    private String cpf;

}

De acordo com a alternativa correta, a informação abaixo me diz sobre um "@EmbeddedId", eu gostaria de entender porque há esse id no final do @Embedded sendo que, ao menos durante o momento das aulas eu não vi esse tipo de situação ser usada, assim tbm como revi sobre @Embedded e @Embeddable no youtube, porem esse outro termo com o nome "Id" junto eu não vi, de forma resumida não entendi porque essa parte foi considerada correta, se possivel por gentileza me explique o que houve, para que eu possa ter uma melhor compreensão. Grato por sua atenção, desde já.

"O atributo id foi mapeado de maneira incorreta
Alternativa correta! O atributo id deveria ser anotado com @EmbeddedId ao invés de @Embedded"
1 resposta

Olá David, tudo bem?

A anotação @Embedded é usada para indicar que uma classe é incorporada em outra classe e, portanto, seus atributos também são mapeados na tabela da classe que a contém. Já a anotação @EmbeddedId é usada para indicar que uma classe é incorporada em outra classe e seus atributos são usados como chave primária da tabela da classe que a contém.

No código que você postou, a classe UsuarioId é incorporada na classe Usuario por meio da anotação @Embedded. No entanto, como a classe UsuarioId é usada como chave primária da tabela da classe Usuario, a anotação correta a ser usada seria @EmbeddedId.

Espero ter esclarecido suas dúvidas. Se precisar de mais alguma ajuda, é só falar.

Espero ter ajudado e bons estudos!