Con Micronaut-Data, tenemos ComposeId out-of-the-box. El manejo es muy similar que JPA.
La tabla de ejemplo contiene una llave primaria formada por dos campos.
CREATE TABLE "author_detail_entity" (
"author_id" BIGINT NOT NULL,
"book_id" BIGINT NOT NULL,
PRIMARY KEY("author_id","book_id"));
Debemos usar las anotaciones provistas para tal fin: EmbeddedId, Embeddable.
import io.micronaut.data.annotation.*;
@MappedEntity
public class AuthorDetailEntity {
@EmbeddedId
private AuthorDetailId authorDetailId;
public AuthorDetailEntity(AuthorDetailId authorDetailId) {
this.authorDetailId = authorDetailId;
}
public AuthorDetailId getAuthorDetailId() {
return authorDetailId;
}
}
@Embeddable
class AuthorDetailId {
@MappedProperty("author_id")
private final Long authorId;
@MappedProperty("book_id")
private final Long bookId;
public AuthorDetailId(Long authorId, Long bookId) {
this.authorId = authorId;
this.bookId = bookId;
}
public Long getAuthorId() {
return authorId;
}
public Long getBookId() {
return bookId;
}
}
Extendemos la interface para obtener un CRUD reactivo.
@R2dbcRepository(dialect = Dialect.POSTGRES)
public interface AuthorDetailRepository
extends ReactiveStreamsCrudRepository<AuthorDetailEntity, AuthorDetailId> {
}
Algunos métodos provistos son find*, delete*, etc.
Documentación
https://micronaut-projects.github.io/micronaut-data/lates/guide/#sqlCompositeId
https://gitlab.com/edgar.gs/mn-r2dbc.git
Top comments (0)