首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用spring-data-jdbc插入不可变记录

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

Stack Overflow用户
提问于 2020-05-02 23:08:57
回答 1查看 698关注 0票数 1

实体为

代码语言:javascript
复制
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都不感兴趣。

存储库:

代码语言:javascript
复制
import org.springframework.data.repository.CrudRepository;

public interface PictureRepository extends CrudRepository<Picture, String>, WithInsert<Picture> {
}
代码语言:javascript
复制
public interface WithInsert<T> {
    T insert(T t);
}
代码语言:javascript
复制
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)时,我得到了以下错误:

代码语言:javascript
复制
 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中使用不可变的实体?

不变性是好的,UUID是好的,自动增量是不好的。我认为这是一个相当大的假设,我想我想要自动增量必然,我希望能够关闭它,以防我不想要它。

编辑:我使用spring-boot-starter-jdbc:2.2.6.RELEASE,它与spring-data-jdbc:1.1.6.RELEASE一起提供。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-25 20:15:30

此错误是在2.0.0版的工作过程中发现并修复的。Spring Data JDBC。

如果您仍然看到此行为或需要向后移植到1.1.x,请在https://jira.spring.io/browse/DATAJDBC上创建一个问题

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61561555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档