代码之家  ›  专栏  ›  技术社区  ›  Kevin

为序列化创建一个字段瞬态,但为JPA创建非瞬态

  •  1
  • Kevin  · 技术社区  · 11 年前

    问题:
    是否可以通过JPA持久化字段,但通过序列化跳过字段?

    有可能实现相反的结果(JPA跳过一个字段,而序列化不跳过),如果使用这个特性,那么反过来肯定会有用。

    类似这样的内容:

    @Entity 
    class MyClass {
        // Other fields.
    
        @NonTransient
        private transient String strangeField;
    }
    

    我问这个问题主要是出于好奇,所以我没有具体的背景。

    2 回复  |  直到 11 年前
        1
  •  2
  •   Kevin    11 年前

    一种选择是对实体使用属性访问。然后,将字段标记为瞬态。JPA将忽略该字段,只使用getter。因此,序列化跳过字段,而JPA使用getter。

    @Entity(AccessType.Property)
    class MyClass {
        // Other fields.
    
        private transient String strangeField;
    
        public String getStrangeField() {
            return strangeField;
        }
    
        public void setStrangeField(String strangeField) {
            this.strangeField = strangeField;
        }
    }
    
        2
  •  0
  •   James    11 年前

    您需要使用属性访问,或者使用XML来映射实体而不是注释。