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