如何在spring boot中存储一个xml节点的多个值?

问题描述 投票:0回答:1

我以下列格式从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字段,但这也不起作用。

java xml spring spring-boot jackson
1个回答
2
投票

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

解决方案是创建一对多关系,这意味着您需要在node_address表旁边单独的node表,其中至少包含node_idaddress字段。

Schema of one-to-many relationship

现在,对于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。如果你不喜欢这个,你将不得不创建多个类,一个用于XML映射,另一个用于JPA映射。

注意:您缺少元素的映射,因此您还必须创建一个MainNode类。

© www.soinside.com 2019 - 2024. All rights reserved.