Есть ли @MappedSuperclass в Spring Reactive Data (R2DBC)
У меня есть супер класс 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;
}
и класс Role расширяется от 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 оба метода работают нормально. Есть ли в Spring Reactive Data такие аннотации @MappedSuperclass/JPA
Я желаю, чтобы поле id в GenericEntity для всех расширяет класс
Спасибо за вашу помощь
Извините, мой английский такой плохой
1 ответ
У меня была аналогичная проблема, и после некоторого поиска я не нашел ответа на ваш вопрос, поэтому я проверяю его, написав код, и ответ: данные Spring R2DBC не нужны.
@Mappedsuperclass
. он объединяет
Role
свойства класса с
Generic
свойства класса, а затем вставляет все в
role
таблицу без необходимости использования каких-либо аннотаций.