[英]Fields marked with @Transient annotation are not being set for the same object in Spring Boot
[英]I have a feeling that adding fields marked with @Transient annotation to entity is very bug-prone. Am I right?
我有一些
哲學上的
直覺,即添加未映射到DB的字段會破壞實體類,並且是解決問題的錯誤方法。
但是有沒有具體情況使用@Transient
字段導致隱式和硬性修復問題?
例如,當我們的實體中有@Transient
字段時,添加或刪除二級緩存是否可能會破壞我們的應用程序?
相當多的更新 :在對@Transient
字段進行一些思考后,在我看來@Transient
字段應該以正確的方式使用。
通過“正確的方式”,我的意思是實體總是應該具有相同的行為。 這意味着當getter根據@Transient字段值不時返回null
時,這是一個非常容易出錯的行為。 這意味着應始終初始化@Transient字段。
我只看到2例正確用法:
@Transient字段應該在object的構造函數中初始化:
@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; } ... }
任何人都可以為這兩起案件做准備或描述我錯過的其他案件嗎?
我在一些持有hibernate的項目中使用Transient注釋,並且還沒有任何問題。
它通常用於可以由其他持久屬性確定的字段,並且使用緩存也應該起作用,因為Javas序列化機制(緩存通常期望緩存對象可序列化)也考慮到Transient注釋。 我認為最好使用瞬態getter和setter屬性,盡可能提供信息而不是實例字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.