如何使用spring-data-jdbc插入不可变记录

问题描述 投票:0回答:1

实体是

import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Table;

import java.util.UUID;

@Table
public record Picture(
        @Id UUID id,
        UUID galleryId,
        String metadata
) { }

请注意,该ID是在客户端分配的UUID,所以我对数据库自动分配的任何ID都不感兴趣。

存储库:

import org.springframework.data.repository.CrudRepository;

public interface PictureRepository extends CrudRepository<Picture, String>, WithInsert<Picture> {
}
public interface WithInsert<T> {
    T insert(T t);
}
import org.springframework.data.jdbc.core.JdbcAggregateTemplate;

public class WithInsertImpl<T> implements WithInsert<T> {

    private final JdbcAggregateTemplate template;

    public WithInsertImpl(JdbcAggregateTemplate template) {
        this.template = template;
    }

    @Override
    public T insert(T t) {
        return template.insert(t);
    }
}

当我调用repository.insert(picture)时,出现以下错误:

 java.lang.UnsupportedOperationException: Cannot set immutable property [...package redacted away...].Picture.id!
    at org.springframework.data.mapping.model.BeanWrapper.setProperty(BeanWrapper.java:86) ~[spring-data-commons-2.2.6.RELEASE.jar!/:2.2.6.RELEASE]
    at org.springframework.data.mapping.model.ConvertingPropertyAccessor.setProperty(ConvertingPropertyAccessor.java:61) ~[spring-data-commons-2.2.6.RELEASE.jar!/:2.2.6.RELEASE]
    at org.springframework.data.relational.core.conversion.AggregateChange.setIdAndCascadingProperties(AggregateChange.java:177) ~[spring-data-relational-1.1.6.RELEASE.jar!/:1.1.6.RELEASE]
    at org.springframework.data.relational.core.conversion.AggregateChange.populateIdsIfNecessary(AggregateChange.java:144) ~[spring-data-relational-1.1.6.RELEASE.jar!/:1.1.6.RELEASE]

问题是:有没有办法我可以在spring-data-jdbc中使用不可变实体?

Rant:不变性好,UUID好,自动增量不好。我认为这是一个假设,我一定要自动增量,并且我希望能够将其关闭以防万一。

编辑:我正在使用spring-data-jdbc:1.1.6.RELEASE附带的spring-boot-starter-jdbc:2.2.6.RELEASE

java spring immutability spring-data-jdbc
1个回答
0
投票

此错误已在2.0.0版的工作期间找到并修复。 Spring Data JDBC。

如果仍然出现此现象,或者需要向1.1.x进行反向移植,请在https://jira.spring.io/browse/DATAJDBC上创建问题。>

© www.soinside.com 2019 - 2024. All rights reserved.