Java Spring JPA:在后续调用save函数后刷新创建的时间戳
我有以下课程:Java Spring JPA:在后续调用save函数后刷新创建的时间戳,java,spring,spring-data-jpa,spring-jdbc,Java,Spring,Spring Data Jpa,Spring Jdbc,我有以下课程: @Entity @Table(name = "payment") public class Payment { @Id private String transactionId; @CreationTimestamp private Timestamp createdTime; @UpdateTimestamp private Timestamp lastModifiedTime; } 我正在扩展JPA public interfac
@Entity
@Table(name = "payment")
public class Payment {
@Id
private String transactionId;
@CreationTimestamp
private Timestamp createdTime;
@UpdateTimestamp
private Timestamp lastModifiedTime;
}
我正在扩展JPA
public interface PaymentRepository extends JpaRepository<Payment, Serializable> {
}
最后,我在数据库中发现createdTime的值为NULL。在这种情况下,不执行第二个save语句,createdTime时间戳的值将按预期显示
如何做才能不丢失创建的时间戳?来自
crudepository
:
S保存(S实体)
保存给定的实体将返回的实例用于进一步的操作,因为保存操作可能会完全更改实体实例
因此,您的代码应为:
Payment p = paymentRepository.save(payment);
/* Some statements (can be some modifications to payment object)*/
Payment p2 = paymentRepository.save(p);
至少我想是这样,请提供进一步的信息,这并不能解决你的问题。(即,您使用哪家JPA提供商?来自
crudepository
:
S保存(S实体)
保存给定的实体将返回的实例用于进一步的操作,因为保存操作可能会完全更改实体实例
因此,您的代码应为:
Payment p = paymentRepository.save(payment);
/* Some statements (can be some modifications to payment object)*/
Payment p2 = paymentRepository.save(p);
至少我想是这样,请提供进一步的信息,这并不能解决你的问题。(即,您使用哪个JPA提供商?我同意Robin的回答,但另外,一个事务中可以运行多个save方法调用。如果您想确定在DB上运行的第一个命令,我的建议是使用saveAndFlush()方法 使用saveAndFlush()方法时,还可以提交现有事务,以便安全地使用实例
注意:但有可能将事务数增加到DB。我同意Robin的答案,但另外,一个事务中可以运行多个save方法调用。如果您想确定在DB上运行的第一个命令,我的建议是使用saveAndFlush()方法 使用saveAndFlush()方法时,还可以提交现有事务,以便安全地使用实例
注意:但有可能会将交易数量增加到DB。当您修改付款对象时,只需检查是否将其设置为nullNo。我没有将其设置为null。当您修改付款对象时,只需检查是否将其设置为null否。我并没有将其设置为null。我只是想知道save的实现是否是异步的,若save需要一些时间,则p将为null(之前在mongorepository中经历过这种情况)。最后我将保存可以为null的p。Hibernate是JPA提供程序。@VishalJamdade这些方法同步运行,否则结果类型将类似于
Future
,因此不,结果p
不能为null
。顺便问一下,你的问题通过修改解决了吗?如果是,请将此问题标记为已回答)我只是想知道save的实现是否是异步的,如果save需要一些时间,那么p将为null(之前在mongorepository中遇到过这种情况)。最后我将保存可以为null的p。Hibernate是JPA提供程序。@VishalJamdade这些方法同步运行,否则结果类型将类似于Future
,因此不,结果p
不能为null
。顺便问一下,你的问题通过修改解决了吗?如果是,请将此问题标记为已回答)如果saveAndFlush()确实在数据库中提交了更改,并且不仅刷新JPA上下文,那么这就解决了我的问题。如果您的方法没有使用@Transactional注释,则在运行saveAndFlush()之后,如果saveAndFlush()可以看到您的更改实际上,在数据库中提交更改,并且不仅刷新JPA上下文,这就解决了我的问题。如果您的方法没有使用@Transactional进行注释,那么您可以在运行saveAndFlush()之后立即看到您的更改