如何在Spring Boot中存储一个xml节点的多个值?

时间:2018-09-04 11:08:37

标签: java xml spring spring-boot jackson

我从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,但这也不起作用。

1 个答案:

答案 0 :(得分:2)

问题是address字段将映射到MySQL中称为address的列,而数据库列只能包含一个值。

解决方案是创建一对多关系,这意味着您需要在node_address表旁边单独的node表,该表至少包含一个node_id和{ {1}}字段。

Schema of one-to-many relationship

现在,对于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类。