【问题标题】:@Transient - Why data is getting saved in Database?@Transient - 为什么数据会保存在数据库中?
【发布时间】:2021-06-09 22:31:10
【问题描述】:

我有一个用@Transient 注释的实体变量,如下所示。这意味着它不应该存储在数据库中。

@Transient
private String passwordConfirm;

但是当我去 H2-Console 时,我可以看到数据保存在那里。

为什么会这样?以及如何避免?

【问题讨论】:

  • 能否包含您的实体、DAO/存储库或您用来将对象存储到数据库中的任何内容?从您在问题中发布的这一注释中,很难猜出一些神秘的东西。请包括minimal reproducible example

标签: spring-boot spring-data-jpa h2


【解决方案1】:

您可能正在使用@org.springframework.data.annotation.Transient

改成正确的导入:@javax.persistence.Transient

这样就可以了。

@javax.persistence.Transient 被持久化提供者使用(例如:Hibernate)。持久性提供程序查找 JPA 规范注释。 @org.springframework.data.annotation.Transient 不是 JPA 规范的一部分,因此持久性提供程序会忽略它。

@org.springframework.data.annotation.Transient 旨在在 Spring Data 是实际的 ORM 时使用。一些例子是 Spring Data Elasticsearch 和 Spring Data MongoDB。这些 Spring Data 实现使用 @org.springframework.data.annotation.Transient,就像 Hibernate 使用 @javax.persistence.Transient - 不将标记的字段映射到数据库中。

【讨论】:

  • 男人...!你搞定了。你说的对。那解决了它。但是,您能否也将 2-3 行用于 - 如果使用 spring import 而不是 javax,为什么会出现这样的行为?为什么 spring 以这种方式实现它?
  • @AjayKumar 当然,添加了解释。答案已更新。
  • 不错。就这样尘埃落定。感谢您简短而准确的解释。在这个可爱的 SO 社区继续努力。再次感谢。
猜你喜欢
  • 2014-02-28
  • 1970-01-01
  • 2011-09-17
  • 2020-08-01
  • 2022-01-18
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多