【发布时间】:2019-09-04 03:19:24
【问题描述】:
我使用 JPA/Hibernate 作为我的持久性框架,并且我有以下实体层次结构:
@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>
不幸的是,我需要让我的 ipAddresses 字段成为 IPAddressDTOs 而不是 Strings 的列表,因为否则我不能使用 @OneToMany 注释(不,我不想使用 @ElementCollection出于性能原因)。
我也想尝试这样做,而不必创建任何额外的包装类。我想如果我为 List<IPAddressDTO> ipAddresses 字段创建一个包装类,我的 Hibernate 注释将不起作用,它只会使代码比它需要的复杂得多。
谢谢大家。
【问题讨论】:
标签: java hibernate jpa orm jaxb