Java有transient关键字。为什么JPA有@Transient而不是简单地使用已经存在的java关键字?


当前回答

通俗地说,如果在实体的属性上使用@Transient注释:该属性将被单独挑选出来,不会保存到数据库中。实体内对象的其余属性仍将被保存。

我保存对象到数据库使用jpa存储库内置的保存方法,这样:

userRoleJoinRepository.save(user2);

其他回答

如果你只是想要一个字段不会被持久化,无论是transient还是@Transient工作。但问题是,既然“瞬态”已经存在,为什么要@Transient。

因为@Transient字段仍然会被序列化!

假设你创建一个实体,做一些cpu消耗的计算来得到一个结果,这个结果不会保存在数据库中。但是您希望将实体发送给其他Java应用程序以通过JMS使用,那么您应该使用@Transient,而不是JavaSE关键字transient。因此,运行在其他vm上的接收器可以节省重新计算的时间。

Java的transient关键字用于表示字段不被序列化,而JPA的@Transient注释用于表示字段不被持久化到数据库中,也就是说,它们的语义是不同的。

因为它们有不同的含义。@Transient注释告诉JPA提供者不要持久化任何(非瞬态的)属性。另一个告诉序列化框架不要序列化某个属性。您可能希望有一个@Transient属性并仍然序列化它。

对于Kotlin开发人员,请记住Java transient关键字将成为内置的Kotlin @Transient注释。因此,如果您在实体中使用JPA @Transient,请确保您有JPA导入:

import javax.persistence.Transient

通俗地说,如果在实体的属性上使用@Transient注释:该属性将被单独挑选出来,不会保存到数据库中。实体内对象的其余属性仍将被保存。

我保存对象到数据库使用jpa存储库内置的保存方法,这样:

userRoleJoinRepository.save(user2);