JAXB 如何将复合键字段映射为同级
JAXB how to map composite key fields as siblings
我在我的数据库模型之后定义了以下实体:
@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 的字段处于同一级别?
请告知我的选择。
移动评论回答:
由于在同一个 class 中可以有多个 @Id
,您只需将字段从 ChildId
class 移动到 Child
class。然后用 @Id
注释每个字段(从 ChildId
移动的字段)。这样一来,所有字段都处于同一级别,因为它们在同一 class 中,同时还保留了 @EmbeddedId
的功能
我在我的数据库模型之后定义了以下实体:
@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 的字段处于同一级别?
请告知我的选择。
移动评论回答:
由于在同一个 class 中可以有多个 @Id
,您只需将字段从 ChildId
class 移动到 Child
class。然后用 @Id
注释每个字段(从 ChildId
移动的字段)。这样一来,所有字段都处于同一级别,因为它们在同一 class 中,同时还保留了 @EmbeddedId