我从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
,但这也不起作用。
答案 0 :(得分:2)
问题是address
字段将映射到MySQL中称为address
的列,而数据库列只能包含一个值。
解决方案是创建一对多关系,这意味着您需要在node_address
表旁边单独的node
表,该表至少包含一个node_id
和{ {1}}字段。
现在,对于JPA映射,您可以进行完整的address
/ @OneToMany
映射,但是在这种情况下,使用@ManyToOne
可能会更有趣:
@ElementCollection
由于Hibernate(默认的JPA提供程序)无法映射到数组,因此您需要在@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
}
字段中使用List<String>
。如果您不喜欢这样做,则必须创建多个类,一个用于XML映射,另一个用于JPA映射。
注意:您缺少元素的映射,因此也必须创建MainNode类。