Spring Reactive Data(R2DBC)中是否有@MappedSuperclass

时间:2019-04-01 00:47:06

标签: spring reactive r2dbc

我有一个像这样的超级实体类:

@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>;

在Router函数中,我有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中是否有Annations @ MappedSuperclass / JPA

我希望GenericEntity中所有扩展类的id字段

感谢您的帮助

对不起,我的英语太差了

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,经过一番搜索,我没有找到您问题的答案,因此我通过编写代码进行了测试,答案是Spring数据R2DBC不需要@Mappedsuperclass。它将Role类属性与Generic类属性聚合在一起,然后将其全部插入role表中,而无需使用任何注释。