我在数据库模型之后定义了以下实体:
@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/