gpt4 book ai didi

java - 仅在某些情况下使用@XmlTransient

转载 作者:行者123 更新时间:2023-12-01 11:51:16 24 4
gpt4 key购买 nike

我有两门课:

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 GET 方法中使用 B 类。但是,当我尝试这样做时,@XmlTransient 会阻止显示 A 字段。当我使用 B 类时,是否可以在 A 类上使用 @XmlTransient 并在 B 上使用它> 类,当我使用 A 类时?

最佳答案

一个简单的解决方案是包含 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. 在序列化类 A 时,不要将类 B 序列化为整个对象,而只是将其序列化为它的字符串表示形式。例如使用@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;
    }

    }

关于java - 仅在某些情况下使用@XmlTransient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28806398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com