首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在spring引导中存储一个xml节点的多个值?

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

Stack Overflow用户
提问于 2018-09-04 11:08:37
回答 1查看 462关注 0票数 0

我有来自web服务的XML响应,格式如下:

代码语言:javascript
运行
复制
<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:

代码语言:javascript
运行
复制
@Entity
@XmlRootElement(name="node")
public class Node{
    @Id
    private int id;
    private String name;
    private String address;
    //Getters and Setters
}

我已经尝试过将String[]用于address字段,但这也不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-04 11:56:01

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

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

现在,对于JPA映射,您可以选择一个完整的@OneToMany/@ManyToOne映射,但在本例中,使用@ElementCollection可能更有趣:

代码语言:javascript
运行
复制
@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类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52164940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档