使用同一组业务对象通过XML进行序列化(通过JAXB与JAX-WS一起使用)和持久化JPA是不是一个好主意?结合这两种范式是否有缺点?#34;进入一个班级?
我的一个班级看起来像像这样:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "testSuiteInfo", propOrder = {
"name",
"tests"
})
@Entity
public class TestSuiteInfo {
@Id
@GeneratedValue
@XmlTransient
protected Long id;
protected String name;
@XmlElement(nillable = true)
@OneToMany
protected List<TestInfo> tests;
// Getters and setters go here...
}
JAX-WS正在接收该类的对象,然后由JPA保留。
答案 0 :(得分:1)
我是Hyperjaxb3的作者,XJC插件,它将JPA注释添加到模式派生类中。因此,您可以采用模式,然后能够执行完整的XML-objects-DB rountrip。 MOXy可以将JPA实体映射到XML as well。
现在回过头去问你的问题吧。 如果对数据库,XML表示和业务逻辑使用相同的类,那么对于所有这三个事物,您基本上具有相同的模型。如果这适合你 - 很好!在许多情况下,这确实有效,因为
在这些情况下,使用具有相同类的XML对象和对象DB非常好。
现在考虑一个更复杂的案例:
所有这些都对XML,JPA和BO部分提出了特定的约束/要求。只用一种型号(无论是JAXB还是JPA),您能满足所有这些要求吗?不太可能。从规范模式生成JAXB类可能会好得多,而且 - 另外 - 仔细设计JPA实体。对,在这种情况下你需要一个映射器,但这是一个较小的邪恶。
还要考虑以下问题:
另一方面,如果你
然后将JPA和JAXB放在同一个类中就可以了,为什么不呢。 (第一种方法是Hyperjaxb3,第二种方法是MOXy。)