我有一个包含不同类型实体集合的实体。我想要做的是让 JAXB 编组仅根据某些标准选择集合的一个子集。
@XmlRootElement
@Entity
public class A{
// other fields
@OneToMany(mappedBy = "x", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Collection<B> bees;
@XmlJavaTypeAdapter(BFormatter.class)
public Collection<B> getBees() {
return bees;
}
public void setBees(Collection<B> bees) {
this.bees= bees;
}
}
@XmlRootElement
@Entity
public class B{
// fields
}
public class BFormatter extends XmlAdapter<Collection<B>, Collection<B>>{
@Override
public Collection<B> unmarshal(Collection<B> v) throws Exception {
return v;
}
@Override
public Collection<B> marshal(Collection<B> v) throws Exception {
Collection<B> subset;
// making subset
return subset;
}
}
这会导致错误提示“java.util.Collection 是一个接口,而 JAXB 无法处理接口”以及“java.util.Collection 没有无参数默认构造函数”。
我做错了什么,这甚至是正确的方法吗?