2016-09-22 19 views
0

我正在使用spring數據jpa來做實體持久性。當我將數據保存到事務中的數據庫時遇到問題。使用spring數據jpa無法在事務中獲得id

我測試我的存儲庫,當沒有事務時,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 

} 

回答

0

您需要捕捉的保存方法返回的更新羣集對象,所以你的代碼應該是這樣的:

@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(); 
} 
+0

試試這個,但不會工作... – nekroex

+0

似乎不太可能在會工作。 JPA更新持久實體上的ID。 –

相關問題