我觉得向实体添加标有@Transient注释的字段非常容易出错.我对吗?

Rom*_*man 5 java hibernate jpa transient

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

但是,是否存在使用@Transient字段导致隐式和硬性修复问题的具体情况?

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

相当大的更新:在对@Transient字段进行一些思考之后,在我看来,@Transient字段应该以正确的方式使用.

通过"正确的方式",我的意思是实体总是应该具有相同的行为.这意味着当getter null不时返回时,这是一个非常容易出错的行为,具体取决于@Transient字段值.这意味着应始终初始化@Transient字段.

我只看到2例正确使用:

  1. @Transient字段应该在object的构造函数中初始化:

    @Entity
    public class SomeEntity
       @Id
       private long id;
    
       @Transient
       private String transientField;
    
       public SomeEntity () {
          transientField = "some string";
       }       
       ...
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. @Transient字段可以延迟初始化:

    @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;
       }       
       ...
    }
    
    Run Code Online (Sandbox Code Playgroud)

任何人都可以为这两起案件做准备或描述我错过的其他案件吗?