如何在JPA中的db中保存对象后获取id?

Sit*_*nsu 5 mysql spring jpa entitymanager spring-boot

当我在保存 ClaimDetail 对象后获取 id 然后获取该保存对象的 id 时,我遇到了问题,它是 0 。实际上我想获取保存的对象 Id 。但它没有来。我没有在 JPA 工作过。我创建了一个用于调度的 Spring Boot 应用程序。

这是我的 ClaimDetails.java 实体类:

@Entity
@Table(name = "claimtrans")
public class ClaimTrans {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}

    claimDetail.setActive(1);
    claimDetail.setVersion(new Long(1));
    claimDetail.setCreatedBy(new Long(1));
    claimDetail.setCreatedDate(new Date());
    claimDetailService.saveClaimDetail(claimDetail);

int temp =claimDetail.getID()
Run Code Online (Sandbox Code Playgroud)

温度为0;

这是我的 JpaRepositoryFactory.java:

@Service
public class ClaimDetailService {

    private JpaRepositoryFactory jpaRepositoryFactory;

    @Autowired
    public ClaimDetailService(JpaRepositoryFactory jpaRepositoryFactory) {
        this.jpaRepositoryFactory = jpaRepositoryFactory;
    }

    @Transactional
    public void saveClaimDetail(ClaimDetail claimDetail) {
        JpaRepository<ClaimDetail, Long> mailAuditLogLongJpaRepository = jpaRepositoryFactory.getRepository(ClaimDetail.class);
        mailAuditLogLongJpaRepository.save(claimDetail);
    }

    public List<ClaimDetail> getAllClaimDetail() {
        JpaRepository<ClaimDetail, Long> mailAuditLogLongJpaRepository = jpaRepositoryFactory.getRepository(ClaimDetail.class);
        return mailAuditLogLongJpaRepository.findAll();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的 JPA 工厂。

@Component
public class JpaRepositoryFactory {

    @PersistenceContext
    private EntityManager entityManager;

    public <T> T getRepository(Class clazz) {
        notNull(clazz);
        notNull(entityManager);
        T crudRepository = (T) new SimpleJpaRepository(clazz, entityManager);
        return crudRepository;
    }
}   
Run Code Online (Sandbox Code Playgroud)

pom.xml

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.5.RELEASE</version>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <start-class>org.sam.application.Application</start-class>
        <java.version>1.6</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.10</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我如何解决这个问题?

谢谢西坦苏

Dee*_*jan 1

编写一个配置类并执行类似的操作。使用 Jpa 存储库

@Configuration
public class ClaimDetailService {


public interface ClaimDetailRepository extends JpaRepository<Claimtrans, String>{
    ClaimDetail findById(String id);
}

    @Autowired
    ClaimDetailRepository claimDetailRepository;

    @Autowired
    public void save(){
        ClaimTrans claimDetail=new ClaimTrans();
        claimDetail.setId(UUID.randomUUID.toString());
         claimDetail.setActive(1);
        claimDetail.setVersion(new Long(1));
        claimDetail.setCreatedBy(new Long(1));
        claimDetail.setCreatedDate(new Date());
        claimDetailRepository.save(claimDetail);

    int temp =claimDetailRepository.findById(claimDetail.getId());

    }

}
Run Code Online (Sandbox Code Playgroud)