【发布时间】:2025-12-12 17:10:01
【问题描述】:
我正在使用Spring boot 2.0.3.RELEASE(FINCHLEY)`starter-data-jpa 2.0.5.RELEASE。
该场景非常基本,构建一个实体并保存它。
在阅读文本之前,让我们先阅读代码以获得更好的上下文。
实体类(Asset):id(主键)不会自动生成,因为我们基本上从另一个来源获得了唯一的UUID.toString(),它肯定是唯一的。
import lombok.*;
import org.springframework.data.domain.Persistable;
import javax.persistence.*;
import java.util.List;
@Setter
@Getter
@ToString
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "ASSET", schema = "SCHEMA")
public class Asset implements Persistable<String> {
// Propriety code hence column names removed.
//Let's just assume column names are fine, since when I am doing a find(), results are cool
private static final long serialVersionUID = 1L;
@Id
private String id;
private String creditPool;
private int quantity;
private int assetStatusTypeId;
private long assetTypeId;
private int ageOfAsset;
//The below snippet is part of Persistable<String> to force a new entry. Newly added following an answer in *.
//Here, update is basically false by default,
//so as you can see isNew() will always return true forcing jpa to save a new record
@Transient
private boolean update;
@Override
public String getId() {
return this.id;
}
@Override
public boolean isNew() {
return !this.update;
}
}
根据我添加的 cmets,你看我添加了 sn-p 因为我们没有自动生成 id。
如果没有 sn-p 和 Persistable,问题是一样的。
由于业务原因,我的自定义存储库类具有以下自定义保存功能。
@Override
public <S extends T> S save(S entity, long value) {
entity.someParams(args getting from from a jar) //which is really fine
return super.save(entity);
}
下面是调用save的代码
Asset asset = Asset.builder()
.id(UUID.randomId().toString()) //see always unique
.assetStatusTypeId(a valid id)
.assetTypeId(a valid id)
.creditPool("pool")
.quantity(integer value)
.ageOfAsset(integer value).build();
repo.save(asset);
我已经多次验证了构建器,它确实创建了一个Asset 对象,没有失败。
但罪魁祸首 save 永远不会被处决。
我打开了showSQL:true 来检查插入查询是否被调用。但我没有看到这样的查询。
休眠属性:
jpa:
show-sql: true
properties:
hibernate:
enable_lazy_load_no_trans: true
show_sql: true
format_sql: true
jdbc:
batch_size: 5
我考虑了一个场景,即使进行了所有安全检查,JPA 也可能将其视为更新场景,
我忽略了保存并使用了persist。即使这样也没有插入。
repo.persist(asset);
请帮忙。
* Sources for my workarounds 和重复项。 对此的任何帮助将不胜感激。
【问题讨论】:
标签: java spring-boot spring-data-jpa