Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring JPA:在后续调用save函数后刷新创建的时间戳_Java_Spring_Spring Data Jpa_Spring Jdbc - Fatal编程技术网

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()之后立即看到您的更改