java - JAXB 如何将复合键字段映射为同级

标签 java xml hibernate jaxb

我在数据库模型之后定义了以下实体:

@Entity
@Table(name = "PERSON")
@XmlRootElement(name = "person")
public class Person implements java.io.Serializable {
    @Id
    private Long personId;
    private String personName;

    @XmlElementWrapper(name="children")
    @XmlElement(name="child")
    private Set<Child> children = new HashSet<Child>(0);

    // getters & setters
}

@Entity
@Table(name = "CHILD")
@XmlRootElement(name = "child")
public class Child implements java.io.Serializable {
    @EmbeddedId
    private ChildId id;
    private Date childName;

    // getters & setters
}

@Embeddable
public class ChildId implements java.io.Serializable {
    @XmlTransient
    private Person parentId;
    private Date childBirthDate;
    private int childOrder;

    // getters & setters
}

在目前的情况下,当使用 JAXB 进行编码时,我得到的是:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person>
    <personId>7</personId>
    <personName>Foo</personName>
    <children>
        <child>
            <childName>Bar</childName>
            <id>
                <childBirthDate>2001-06-22</childBirthDate>
                <childOrder>1</childOrder>
            </id>
        </child>
    </children>
</person>

我想要得到的是这样的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person>
    <personId>7</personId>
    <personName>Foo</personName>
    <children>
        <child>
            <childName>Bar</childName>
            <childBirthDate>2001-06-22</childBirthDate>
            <childOrder>1</childOrder>
        </child>
    </children>
</person>

有没有办法让 ChildId 的字段与其他 Child 的字段处于同一级别?

请告知我的选择是什么。

最佳答案

将评论移至答案:

由于同一个类中可以有多个 @Id,因此您只需将字段从 ChildId 类移动到 Child 类即可。然后,您使用 @Id 注释每个字段(从 ChildId 移动的字段)。这样,您就可以将所有字段置于同一级别,就像它们在同一类中一样,同时还保留 @EmbeddedId

的功能

关于java - JAXB 如何将复合键字段映射为同级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57432323/

相关文章:

java - 子类和 hql

java - MSSql 服务器 jpa 空间异常

java - 确定 JavaFX 字体的宽度和高度

与 Java 6 相比,Java 8 较差的 GUI 性能

c# - 阅读 Stack Overflow RSS 提要

Python lxml 和标准输入

postgresql - hibernate不创建表postgresql

java - 如何将字符串转换为每个包含一个字符的字符串数组

java - 获取音乐播放器Android的专辑封面(错误)

java - 没有 xml 的 Hibernate