Java JAXB在编组时展平实体列表
我使用JPA/Hibernate作为持久性框架,我有以下实体层次结构:Java JAXB在编组时展平实体列表,java,hibernate,jpa,orm,jaxb,Java,Hibernate,Jpa,Orm,Jaxb,我使用JPA/Hibernate作为持久性框架,我有以下实体层次结构: @Entity @Table(name = "node") @XmlRootElement(name = "nodeMap") @XmlAccessorType(XmlAccessType.FIELD) public class NodeMapDTO { @XmlElementWrapper(name = "ipAddresses") @XmlElement(name = "ipAddress")
@Entity
@Table(name = "node")
@XmlRootElement(name = "nodeMap")
@XmlAccessorType(XmlAccessType.FIELD)
public class NodeMapDTO {
@XmlElementWrapper(name = "ipAddresses")
@XmlElement(name = "ipAddress")
@OneToMany
@JoinColumn(name = "node_id")
private List<IPAddressDTO> ipAddresses;
[...]
}
@Entity
@Table(name = "node_ip_address")
@XmlAccessorType(XmlAccessType.FIELD)
public class IPAddressDTO {
@Column(name = "ip_address")
private String ipAddress;
[...]
}
当我将NodeMapDTO转换为XML时,会得到以下结果:
<nodeMap>
<ipAddresses>
<ipAddress>
<ipAddress>192.59.233.20</ipAddress>
</ipAddress>
</ipAddresses>
</nodeMap>
但我希望它是:
<nodeMap>
<ipAddresses>
<ipAddress>192.59.233.20</ipAddress>
</ipAddresses>
</nodeMap>
不幸的是,我需要让我的IPAddresss字段成为IPAddressDTO的列表,而不是字符串,因为否则我无法使用@OneToMany注释,不,出于性能原因,我不想使用@ElementCollection
我还想尝试这样做,而不必创建任何额外的包装器类。我认为如果我为ListIpaAddresses字段创建一个包装类,我的Hibernate注释将无法工作,它只会使代码比需要的复杂得多
谢谢大家。用注释字段ipAddress
以下是全文:
导入java.util.*;
导入javax.xml.bind.*;
导入javax.xml.bind.annotation.*;
公开课考试{
公共静态无效主字符串[]args引发异常{
Marshaller Marshaller=JAXBContext.newInstanceNodeMapDTO.class.createMarshaller;
marshaller.setPropertyMarshaller.JAXB_格式化的_输出,true;
marshaller.marshallnew NodeMapDTOnew ipaddress dto192.59.233.20,System.out;
}
}
@XmlRootElementname=nodeMap
@XmlAccessorTypeXmlAccessType.FIELD
公共类nodemapdo{
@XmlElementWrappername=IPAddresss
@XmlElementname=ipAddress
私人名单地址;
NodeMapDTO{
}
NodeMapDTOIPAddressDTO…IP地址{
this.ipAddresses=Arrays.asListipAddresses;
}
}
@XmlAccessorTypeXmlAccessType.FIELD
公共类IPAddressDTO{
@XmlValue
私有字符串IP地址;
IPAddressDTO{
}
ipAddress转发ipAddress{
this.ipAddress=ipAddress;
}
}
输出
192.59.233.20
这对我来说非常有效。非常感谢。如果其他人好奇,我还必须在IPAddressDTO.ipAddress字段的getter顶部添加一个@JsonValue注释,以使其适用于JSON。