我收到来自 Web 服务的 XML 响应,格式如下:
<main-node>
<node>
<id>101</id>
<name>Test</name>
<address>test</address>
<address>test1</address>
</node>
<node>
<id>102</id>
<name>Jack</name>
<address>New York</address>
<address>London</address>
<address>Canberra</address>
<address>Cape Town</address>
</node>
</main-node>
我创建了 POJO 类并很好地映射了它们,并且能够将值存储在 MySQL 数据库中。但是,对于 address
字段,仅保存其中一个地址。如何在数据库中存储多个值?
这是我用于前面提到的 XML 结构的 POJO:
@Entity
@XmlRootElement(name="node")
public class Node{
@Id
private int id;
private String name;
private String address;
//Getters and Setters
}
我已经尝试使用 String[]
作为 address
字段,但这也不起作用。
最佳答案
问题是address
字段将映射到名为 address
的列在MySQL中,数据库列只能包含一个值。
解决方案是创建一对多关系,这意味着您需要一个单独的 node_address
你旁边的 table node
表,至少包含 node_id
和address
字段。
现在,对于 JPA 映射,您可以选择完整的 @OneToMany
/@ManyToOne
映射,但在本例中,使用 @ElementCollection
可能更有趣:
@Entity
@XmlRootElement(name = "node")
public class Node {
@Id
private int id;
private String name;
@ElementCollection
@CollectionTable(
name="NODE_ADDRESS",
joinColumns=@JoinColumn(name="NODE_ID")
)
@Column(name = "ADDRESS")
private List<String> address;
// Getters + Setters
}
由于 Hibernate(默认的 JPA 提供程序)无法映射到数组,因此您需要使用 List<String>
对于address
field 。如果您不喜欢这样,则必须创建多个类,一个用于 XML 映射,另一个用于 JPA 映射。
Note: You're missing a mapping for your element, so you'll have to create a MainNode class as well.
关于java - 如何在 Spring Boot 中存储一个 xml 节点的多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52164940/