我有来自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
字段,但这也不起作用。
发布于 2018-09-04 03:56:01
问题是address
字段将映射到一个名为address
in MySQL的列,而数据库列只能包含一个值。
解决方案是创建一对多的关系,这意味着在node
表旁边需要一个单独的node_id
表,该表至少包含一个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提供程序)不能映射到数组,所以需要为address
字段使用一个address
。如果您不喜欢这样,您必须创建多个类,一个用于XML映射,另一个用于JPA映射。
注意到:您缺少元素的映射,所以您还必须创建一个MainNode类。
https://stackoverflow.com/questions/52164940
复制相似问题