gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:18:53 25 4
gpt4 key购买 nike

我在保存 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()

温度为 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();
}
}

这是我的 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;
}
}

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>

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

谢谢
西坦苏

最佳答案

JPA 规范不保证提供的实体对象在保存后会更新。要获取保存的 JPA 实体,您必须使用 save() 的返回值。方法。例如,您的服务可以这样更改:

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

您的示例代码将是:
claimDetail.setActive(1);
claimDetail.setVersion(new Long(1));
claimDetail.setCreatedBy(new Long(1));
claimDetail.setCreatedDate(new Date());
ClaimDetail savedClaimDetail = claimDetailService.saveClaimDetail(claimDetail);
int temp = savedClaimDetail.getID()

此外,虽然与您的问题没有直接关系,但您不需要按照您的方式创建 Spring Data 存储库。只需创建您自己的接口(interface)扩展 JPARepository。

关于mysql - 如何在JPA中的db中保存对象后获取id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38142940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com