我有一些哲学上的直观感觉,即添加未映射到数据库的字段会破坏实体类,并且是解决问题的错误方法。
但是是否存在使用@Transient
字段会导致隐含和难以修复的问题的具体情况?
@Transient
例如,当我们的实体中有字段时,添加或删除二级缓存是否会破坏我们的应用程序?
相当大的更新:在对@Transient
字段进行了一些思考之后,在我看来,@Transient
字段应该以适当的方式使用。
通过“适当的方式”,我的意思是实体总是应该有相同的行为。null
这意味着当 getter根据 @Transient 字段值不时返回 's 时,这是一个非常容易出错的行为。这意味着应该始终初始化 @Transient 字段。
而且我只看到 2 个正确使用的案例:
@Transient 字段应该在对象的构造函数中初始化:
@Entity public class SomeEntity @Id private long id; @Transient private String transientField; public SomeEntity () { transientField = "some string"; } ... }
@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; } ... }
谁能评论这两个案例或描述我错过的其他案例?