2015-03-02 120 views
0

我有兩個類:使用@XmlTransient只在某些情況下

public class A implements Serializable { 
    ... 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fieldID") 
    private Collection<B> bCollection; 
    ... 
    public Collection<B> getBCollection() 
    { 
     return bCollection; 
    } 
    public void setBCollection(Collection<B> bCollection) 
    { 
     this.bCollection = bCollection; 
    } 
} 

public class B implements Serializable { 
    ... 
    @JoinColumn(name = "aID", referencedColumnName = "id") 
    @ManyToOne(optional = false) 
    private A aID; 
    ... 
    @XmlTransient 
    public A getAID() { 
     return aID; 
    } 
    public void setAID(A aID) { 
     this.aID= aID; 
    } 
} 

我總是用A類 - 它正在爲inteded,但現在,我想用B類的RESTful GET方法。但是,當我嘗試這樣做時,@XmlTransient禁止顯示A字段。是否有可能在A類上使用@XmlTransient,當我使用B類時,在B類上使用它,當我使用A類時?

回答

1

一個簡單的解決方案是包括https://eclipse.org/eclipselink/moxy.php並開始使用@XmlInverseReference註解用於雙向依賴性。 http://eclipse.org/eclipselink/api/2.2/org/eclipse/persistence/oxm/annotations/XmlInverseReference.html

如果這是不可能,請提供JAXB/JAX-RS實現您正在使用能夠拿出你的問題的一些更具體的解決方案的更多信息。

一般來說,這個想法是控制序列化過程,並決定如何對某些對象/字段進行序列化,以及是否應該序列化這些對象/字段。例如,它可以實現與以下策略:

  1. 序列化B類不是整個物體,而僅僅是作爲它的字符串表示,當A類是序列化。例如使用@XmlAttribute @XmlIDREF。通過設置,例如

  2. 控制序列化過程中,某種過濾器/排除的(這取決於什麼是您的JAX-RS的實現提供):

    ExclusionStrategy() { 
    
        public boolean shouldSkipClass(Class<?> clazz) { 
         return (clazz == B.class); 
        } 
    
        /** 
         * Custom field exclusion goes here 
         */ 
        public boolean shouldSkipField(FieldAttributes f) { 
         return false; 
        } 
    
    } 
    
相關問題