使用spring数据jpa无法在事务中获取id

时间:2016-09-22 17:48:42

标签: transactions spring-data-jpa

我使用spring数据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

}

1 个答案:

答案 0 :(得分:0)

您需要捕获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();
}