仅在某些情况下使用@XmlTransient
Use @XmlTransient only in some cases
我有两个 classes:
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
class - 它按预期工作,但现在,我想在 RESTful [中使用 B
class GET
方法。但是,当我尝试这样做时,@XmlTransient
阻止显示 A
字段。是否可以在 A
class 上使用 @XmlTransient
,当我使用 B
class 并在 B
[=25= 上使用它时? ], 当我使用 A
class?
一个简单的解决方案是包含 https://eclipse.org/eclipselink/moxy.php and start using @XmlInverseReference
annotation for bi-directional dependencies. http://eclipse.org/eclipselink/api/2.2/org/eclipse/persistence/oxm/annotations/XmlInverseReference.html。
如果不可能,请提供更多信息,您正在使用哪种 JAXB/JAX-RS 实现,以便能够针对您的问题提出一些更具体的解决方案。
总的来说,想法是控制序列化过程并决定某些 objects/fields 被序列化的程度,以及是否应该对这些序列化。例如,可以通过以下策略来实现:
当 class A 被序列化时, 序列化 class B 不是作为一个完整的对象,而是作为它的字符串表示。例如使用 @XmlAttribute @XmlIDREF
.
通过设置某种类型的 Filter/Exclusion 来控制序列化过程(取决于您的 JAX-RS 实现提供了什么):
ExclusionStrategy() {
public boolean shouldSkipClass(Class<?> clazz) {
return (clazz == B.class);
}
/**
* Custom field exclusion goes here
*/
public boolean shouldSkipField(FieldAttributes f) {
return false;
}
}
我有两个 classes:
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
class - 它按预期工作,但现在,我想在 RESTful [中使用 B
class GET
方法。但是,当我尝试这样做时,@XmlTransient
阻止显示 A
字段。是否可以在 A
class 上使用 @XmlTransient
,当我使用 B
class 并在 B
[=25= 上使用它时? ], 当我使用 A
class?
一个简单的解决方案是包含 https://eclipse.org/eclipselink/moxy.php and start using @XmlInverseReference
annotation for bi-directional dependencies. http://eclipse.org/eclipselink/api/2.2/org/eclipse/persistence/oxm/annotations/XmlInverseReference.html。
如果不可能,请提供更多信息,您正在使用哪种 JAXB/JAX-RS 实现,以便能够针对您的问题提出一些更具体的解决方案。
总的来说,想法是控制序列化过程并决定某些 objects/fields 被序列化的程度,以及是否应该对这些序列化。例如,可以通过以下策略来实现:
-
当 class A 被序列化时,
序列化 class B 不是作为一个完整的对象,而是作为它的字符串表示。例如使用
@XmlAttribute @XmlIDREF
.通过设置某种类型的 Filter/Exclusion 来控制序列化过程(取决于您的 JAX-RS 实现提供了什么):
ExclusionStrategy() { public boolean shouldSkipClass(Class<?> clazz) { return (clazz == B.class); } /** * Custom field exclusion goes here */ public boolean shouldSkipField(FieldAttributes f) { return false; } }