Java 我觉得在实体中添加带有@Transient注释的字段非常容易出现错误。我说得对吗?

Java 我觉得在实体中添加带有@Transient注释的字段非常容易出现错误。我说得对吗?,java,hibernate,jpa,transient,Java,Hibernate,Jpa,Transient,我有一些哲学直觉的感觉,添加未映射到DB的字段会破坏实体类,是解决问题的错误方法 但是,在具体情况下,使用@Transient字段是否会导致隐式和难以修复的问题 例如,当我们的实体中存在@Transient字段时,添加或删除二级缓存是否可能会中断我们的应用程序 大量更新:在对@Transient字段进行一些思考之后,我觉得@Transient字段应该以适当的方式使用 我所说的“正确的方式”是指实体应该始终具有相同的行为。这意味着,当getter根据@Transient字段值不时返回null,这是

我有一些哲学直觉的感觉,添加未映射到DB的字段会破坏实体类,是解决问题的错误方法

但是,在具体情况下,使用
@Transient
字段是否会导致隐式和难以修复的问题

例如,当我们的实体中存在
@Transient
字段时,添加或删除二级缓存是否可能会中断我们的应用程序

大量更新:在对
@Transient
字段进行一些思考之后,我觉得
@Transient
字段应该以适当的方式使用

我所说的“正确的方式”是指实体应该始终具有相同的行为。这意味着,当getter根据@Transient字段值不时返回
null
,这是一种非常容易出错的行为。这意味着@Transient字段应该始终被初始化

我只看到了两个正确使用的案例:

  • @应在对象的构造函数中初始化瞬态字段:

    @Entity
    public class SomeEntity
       @Id
       private long id;
    
       @Transient
       private String transientField;
    
       public SomeEntity () {
          transientField = "some string";
       }       
       ...
    }
    
  • @瞬态字段可以延迟初始化:

    @Entity
    public class SomeEntity
       @Id
       private long id;
    
       @Transient
       private String transientField;
    
       public String getTransientField () {
          synchronized (lock) {
             if (transientField == null) {
                transientField = "some string";
             }   
          }
          return transientField;
       }       
       ...
    }
    

  • 有谁能说出这两个案例,或者描述一下我遗漏的其他案例吗?

    我在一些项目中使用了瞬态注释,这些项目也使用了hibernate,并且还没有出现任何问题

    它通常用于可以由其他持久性属性确定的字段,并且使用缓存也应该起作用,因为Java的序列化机制(缓存通常期望缓存的对象是可序列化的)也考虑了瞬态注释。我认为最好尽可能使用提供信息的瞬时getter和setter属性,而不是实例字段。

    当你说“哲学”时,你是说“直觉”吗?