Есть ли @MappedSuperclass в весенних реактивных данных (R2DBC)

#spring #reactive #r2dbc

#spring #реактивный #r2dbc

Вопрос:

У меня есть класс super Entity, подобный этому:

 @Getter
@Setter
@NoArgsConstructor
public class GenericEntity {
    @Id
    private Long id;

    @JsonIgnore
    @CreatedBy
    private Long createdBy;

    @JsonIgnore
    @CreatedDate
    private Long createdDate;

    @JsonIgnore
    @LastModifiedBy
    private Long updatedBy;

    @JsonIgnore
    @LastModifiedDate
    private Long updatedDate;

    @JsonIgnore
    @Version
    private Integer version = 0;
}
  

и класс роли расширяется из GenericEntity вот так:

 @Getter
@Setter
@NoArgsConstructor
public class Role extends GenericEntity {
    private String name;
    private String desc;
    private Integer sort;
}
  

И после этого у меня есть интерфейс RoleRepo, подобный этому:

 @Repository
public interface RoleRepo extends ReactiveCrudRepository<Role, Long>;
  

В функции маршрутизатора у меня есть 2 метода обработки

 private Mono<ServerResponse> findAllHandler(ServerRequest request) {
        return ok()
            .contentType(MediaType.APPLICATION_JSON)
            .body(roleRepo.findAll(), Role.class);

    }

private Mono<ServerResponse> saveOrUpdateHandler(ServerRequest request) {
        return ok()
            .contentType(MediaType.APPLICATION_JSON_UTF8)
            .body(request.bodyToMono(Role.class).flatMap(role -> {
                return roleRepo.save(role);
            }), Role.class);
    }
  

Метод findAllHandler работает нормально, но saveOrUpdateHandler выдает исключение, подобное этому:

 java.lang.IllegalStateException: Required identifier property not found for class org.sky.entity.system.Role!
    at org.springframework.data.mapping.PersistentEntity.getRequiredIdProperty(PersistentEntity.java:105) ~[spring-data-commons-2.2.0.M2.jar:2.2.0.M2]
    at org.springframework.data.r2dbc.function.convert.MappingR2dbcConverter.lambda$populateIdIfNecessary$0(MappingR2dbcConverter.java:85) ~[spring-data-r2dbc-1.0.0.M1.jar:1.0.0.M1]
  

Но когда я перемещаю

 @Id
private Long id;
  

из класса GenericEntity в класс Role два метода работают нормально.
Есть ли какие-либо аннотации @MappedSuperclass / JPA в Spring Reactive Data, подобные этому

Я бы хотел, чтобы поле id в GenericEntity для всех расширяло класс

Спасибо за вашу помощь

Извините, мой английский настолько плох

Комментарии:

1. Короче говоря: Нет. Эта проблема звучит (с @Id точки зрения) как ошибка. Я подал github.com/spring-projects/spring-data-r2dbc/issues/87 для отслеживания проблемы.

Ответ №1:

У меня была похожая проблема, и после некоторого поиска я не нашел ответа на ваш вопрос, поэтому я тестирую его, написав код, и ответ — spring data R2DBC не нужны @Mappedsuperclass . он объединяет свойства Role класса со свойствами Generic класса, а затем вставляет все в role таблицу без необходимости использовать какие-либо примечания.