簡體   English   中英

我覺得向實體添加標有@Transient注釋的字段非常容易出錯。 我對嗎?

[英]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例正確用法:

  1. @Transient字段應該在object的構造函數中初始化:

     @Entity public class SomeEntity @Id private long id; @Transient private String transientField; public SomeEntity () { transientField = "some string"; } ... } 
  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; } ... } 

任何人都可以為這兩起案件做准備或描述我錯過的其他案件嗎?

我在一些持有hibernate的項目中使用Transient注釋,並且還沒有任何問題。

它通常用於可以由其他持久屬性確定的字段,並且使用緩存也應該起作用,因為Javas序列化機制(緩存通常期望緩存對象可序列化)也考慮到Transient注釋。 我認為最好使用瞬態getter和setter屬性,盡可能提供信息而不是實例字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM