【问题标题】:using spring data jpa can not get id in transaction使用spring data jpa无法在事务中获取id
【发布时间】:2017-01-31 10:10:52
【问题描述】:

我正在使用 spring data jpa 来做实体持久性。我在事务中将数据保存到数据库时遇到了问题。

我测试我的存储库,当没有事务时,save 方法会将 id 填充到实体,但是当我在服务上使用事务时,save 方法不再填充 id,我想知道为什么,任何感谢建议

我的服务:

@Transactional
@Override
public Long save(ClusterDTO clusterDTO) {
    Cluster cluster = clusterMapper.dtoToDO(clusterDTO);
    cluster.setGmtCreate(new Date());
    cluster.setGmtModified(new Date());
    clusterRepository.save(cluster);
    return cluster.getId();
}

我的仓库很简单:

public interface ClusterRepository extends CrudRepository<Cluster, Long> {
}

我的实体是:

@Entity
@Table(name = "cluster")
public class Cluster {

    @Id
    @Column
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long   id;

    @Column
    private String name;

    ...getters setters

}

【问题讨论】:

    标签: transactions spring-data-jpa


    【解决方案1】:

    您需要捕获 save 方法返回的更新后的集群对象,因此您的代码应如下所示:

    @Transactional
    @Override
    public Long save(ClusterDTO clusterDTO) {
        Cluster cluster = clusterMapper.dtoToDO(clusterDTO);
        cluster.setGmtCreate(new Date());
        cluster.setGmtModified(new Date());
    
        cluster = clusterRepository.save(cluster);
    
        return cluster.getId();
    }
    

    【讨论】:

    • 这似乎不太可能奏效。 JPA 更新持久实体上的 ID。
    猜你喜欢
    • 2021-03-16
    • 2015-04-20
    • 1970-01-01
    • 2019-11-18
    • 2015-05-04
    • 2013-03-07
    • 2013-08-26
    • 2018-11-24
    • 2011-08-06
    相关资源
    最近更新 更多