我有两个班级:
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
类 - 它按照有意的方式工作,但现在,我想在RESTful B
方法中使用GET
类。但是,当我尝试这样做时,@XmlTransient
会阻止显示A
字段。当我使用@XmlTransient
类并在A
类上使用时,可以在B
类上使用B
,当我使用A
类时?
答案 0 :(得分: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实施方案,以便为您的问题提供更具体的解决方案。
一般来说,这个想法是控制序列化过程并决定某些对象/字段是如何序列化的,以及它们是否应该被序列化。例如,可以通过以下策略来实现:
将类B序列化时,不是将B类序列化为整个对象,而是将其作为String的表示形式。例如,使用@XmlAttribute @XmlIDREF
。
通过设置某种过滤/排除(取决于您的JAX-RS实现提供的内容)来控制序列化过程:
ExclusionStrategy() {
public boolean shouldSkipClass(Class<?> clazz) {
return (clazz == B.class);
}
/**
* Custom field exclusion goes here
*/
public boolean shouldSkipField(FieldAttributes f) {
return false;
}
}