JPA和JAXB:特殊的JAXB和JPA复杂性:为什么我需要私有和公共修饰符?
我在看一些遗留代码,它是一个用JPA映射的实体。该对象还通过JaxB转换为XML。我是JPA和JaxB的新手。下面是一个代码剪:JPA和JAXB:特殊的JAXB和JPA复杂性:为什么我需要私有和公共修饰符?,jpa,jaxb,Jpa,Jaxb,我在看一些遗留代码,它是一个用JPA映射的实体。该对象还通过JaxB转换为XML。我是JPA和JaxB的新手。下面是一个代码剪: @Entity @Audited @Table(name = "TTRANSACTION_ITEM") @DiscriminatorColumn() public class TransactionItem { @Transient private Order order; private List<Comment> commen
@Entity
@Audited
@Table(name = "TTRANSACTION_ITEM")
@DiscriminatorColumn()
public class TransactionItem {
@Transient
private Order order;
private List<Comment> comments;
private List<Attachment> attachments;
@XmlTransient
private Timestamp lastPrintDate;
private String createdBy;
@XmlTransient
private Timestamp creationDate;
@XmlTransient
private Timestamp lastUpdateDate;
private String lastUpdateBy;
private int isSendDiploma;
@Transient
private Student aStudent;
// NOTE, I'm forced to make THESE TWO PUBLIC or else i won't show in XML:
@Transient
public String studentFirstName;
@Transient
public String studentLastName;
...
...
}
@实体
@审计
@表(name=“t交易项目”)
@鉴别器列()
公共类事务项{
@短暂的
私人秩序;
私人名单评论;
私人名单附件;
@XmlTransient
私有时间戳lastPrintDate;
创建的私有字符串;
@XmlTransient
私有时间戳creationDate;
@XmlTransient
私有时间戳lastUpdateDate;
私有字符串lastUpdateBy;
私人国际文凭;
@短暂的
私立学生;
//注意,我被迫公开这两个选项,否则我将不在XML中显示:
@短暂的
公共字符串studentFirstName;
@短暂的
公共字符串studentLastName;
...
...
}
问题:
(一)
生成的xml文件中的元素名称是否来自数据库表的字段?例如,在生成的xml文件中,我看到的是SendDiplificate,而不是IsSendDiplificate
(二)
为什么实例变量需要是私有的?我将其更改为public或protected,元素将不会出现在XML中。奇怪的是,如果我想在xml的java代码中包含额外的变量,比如(studentFirstName),我需要使用公共变量。例如,公共字符串studentFirstName。因为我不希望studentFirstName出现在数据库中,所以我使用@Transient。我添加studentFirstName是因为无论出于何种原因,我都没有看到任何包含“aStudent”及其值(如firstName和lastName)的元素
3) 为什么XML中的元素顺序是不可预测的?订单是从哪里来的?我没有看到任何用于指示顺序的JaxB注释。不幸的是,我不能在这里包含xml输出,因为它对问题3敏感:对于问题2:谢谢,我通过您的链接得到了它。事实证明,我的同事没有使用@XmlElement注释。一旦使用了它,我就可以使用studentFirstName的私有修改器。稍后我将不得不学习jaxb。那么,我如何将此标记为已解决?无需;因为你的问题已经在这个网站上的另一个帖子上被另一个答案解决了,所以其他人会将它标记为重复