我正在向您展示我已经拥有的课程,我想使用jaxb进行序列化。 不幸的是,当我尝试序列化Person内部的positionSet时,我无法完全获得Person对象内部存在的所有属性

码:

    public class Person {   
        @Id
        @Column(name = "ID")
        private Integer id;

        @Column(name = "FIRST_NAME")
        @NotNullOnlyJsp
        private String firstName;

        @Column(name = "LAST_NAME")
        @NotNullOnlyJsp
        private String lastName;    

        @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "person")
        @org.hibernate.annotations.OrderBy(clause = "start_date asc")
        private Set<Position> positionSet = new LinkedHashSet<Position>();

        // getter and setter and other methods..    

    }

    public class Position{

        @Id
        @Column(name = "ID")
        private Integer id;

        @Column(name = "FK_PERSON")
        @NotNull
        private Integer personId;

        @Column(name = "FK_POSITION_TYPE")
        @NotNull
        private Integer positionTypeId;

        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "FK_POSITION_TYPE", insertable = false, updatable = false)
        private Entity positionType;


        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "FK_PERSON", insertable = false, updatable = false)
        // I need this annotation to avoid ciclyc graph
        @XmlInverseReference(mappedBy="positionSet")
        private Person person;

        @Column(name = "FK_ORG_UNIT")
        @NotNull
        private Integer organizationUnitId;

        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "FK_ORG_UNIT", insertable = false, updatable = false)
        // I need this annotation to avoid ciclyc graph
        @XmlInverseReference(mappedBy="organizationUnitPositionSet")
        private OrganizationUnit organizationUnit;


    // getter and setter and other methods..    
    }


    public class OrganizationUnit{

        @Id
        @Column(name = "ID")
        private Integer id;

        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "FK_ORG_UNIT_TYPE", insertable = false, updatable = false)
        private OrganizationUnitType organizationUnitType;

        @Column(name = "FK_ORG_UNIT_TYPE")
        private Integer organizationUnitTypeId;

        @Column(name = "DESCRIPTION", length = 4000)
        @NotNull
        private String description;

        @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "organizationUnit")
        @org.hibernate.annotations.OrderBy(clause = "start_date asc")
        // I need this annotation to avoid ciclyc graph
        private Set<Position> organizationUnitPositionSet = new LinkedHashSet<Position>();

        // getter and setter and other methods..    
    }

现在,您可以了解到这些关系:人员一对多职位一对多OrganizationUnit职位具有两个属性:引用OrganizationUnit的“ positionType”和“ organizationUnit”当jaxb序列化时,我只能看到positionType元素以及有关organizationUnit元素的任何内容内部位置。 我试图检查Position是否包含值,并且发现数据在对象内部可用。 PositionType内部的positionType和organizationalUnit属性之间的区别是@XmlInverseReference批注,我需要OrganizationUnit类映射的organizationalUnit属性,而我不需要positionType的批注。

我该如何解决这个问题? 为什么批注不允许我访问Position中的organizationalUnit?

我希望有人能帮助我。 为了向您显示它已序列化但未正确显示,我将向您显示xml输出文件:我看不到organizationUnit属性

    <person>
    // other property
    <position-set>
        <position>
            <id>174215</id>
            <discriminator>support</discriminator>
            <endDate>2005-06-30T00:00:00</endDate>
            <organizationUnitId>1234</organizationUnitId>
                <positionType>
                    <id>2733</id>
                    <displayValue>BLABLA</displayValue>
                        <organization-unit-type>
                            <id>101</id>
                            <description>supportRole</description>
                        </organization-unit-type>
                </positionType>
            <startDate>2005-02-01T00:00:00</startDate>
        </position>
    </position-set>

    This is the oxm file:
    <?xml version="1.0"?>
    <xml-bindings
        xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
        package-name="it.mymodel.ga.model" >
        <xml-schema
            element-form-default="QUALIFIED"/>  
        <java-types>
            <java-type name="Person"  xml-accessor-type="NONE">
                <xml-root-element/>
                <java-attributes>
                    <xml-element java-attribute="firstName" name="first-name" />
                    <xml-element java-attribute="lastName" name="last-name" />
                    <xml-element java-attribute="stringMap" name="string-map" />
                     <xml-element java-attribute="positionSet"  name="position" >
                          <xml-element-wrapper name="position-set"/>
                     </xml-element>
                </java-attributes>
            </java-type>
            <java-type name="Position"> <!-- I had to use this approach than xml-accessor-type="NONE" unlikely -->
                    <java-attributes>
                          <xml-element java-attribute="discriminator" />
                          <xml-element java-attribute="startDate" />
                          <xml-element java-attribute="endDate"/>
                          <xml-element java-attribute="organizationUnit" name="organization-unit"/>
                          <xml-element java-attribute="positionType" name="position-type"/>
                          <xml-transient java-attribute="person"/>
                          <xml-transient java-attribute="positionTypeId"/>
                          <xml-transient java-attribute="fileInfo"/>
                          <xml-transient java-attribute="personId"/>
                          <xml-transient java-attribute="priority"/>
                          <xml-transient java-attribute="uniqueIdentifier"/>
                          <xml-transient java-attribute="uuid"/>
                          <xml-transient java-attribute="removeFile"/>
                   </java-attributes>
            </java-type>
           <java-type name="OrganizationUnit">
                   <java-attributes>
                    <xml-transient java-attribute="description" name="description" />
                    <xml-element java-attribute="organizationUnitType"  name="organization-unit-type"/>
                    <xml-transient java-attribute="displayAs"/>
                    <xml-transient java-attribute="organizationUnitTypeId"/>
                    <xml-element java-attribute="displayValue" />
                  </java-attributes>
            </java-type>
            <java-type name="OrganizationUnitType" >
                        <java-attributes>
                            <xml-element java-attribute="description"/>
                            <xml-transient java-attribute="priority"/>
                        </java-attributes>
            </java-type> 
        </java-types>
    </xml-bindings>

===============>>#1 票数:1 已采纳

我只是通过在Position类中删除organizational属性上的@XmlInverseReference注释来解决,并且为OrganizationUnit类中的positionSet属性指定了xml-transient

oxm file :
<?xml version="1.0"?>
<xml-bindings
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
    package-name="mypackage" >
    <xml-schema
        element-form-default="QUALIFIED"/>  
    <java-types>
        <java-type name="Person"  xml-accessor-type="NONE">
            <xml-root-element/>
            <xml-type prop-order="firstName lastName addressSet contactSet integerMap dateMap stringMap positionSet personElementSet clobMap blobMap gaDictionaryMap "/>
            <java-attributes>
                <xml-element java-attribute="firstName" name="first-name" />
                <xml-element java-attribute="lastName" name="last-name" />
                <xml-element java-attribute="stringMap" name="string-map" >
                    <xml-java-type-adapter value="it.cineca.jaxb.adapter.StringMapAdapter" />    
                </xml-element>
                <xml-element java-attribute="personElementSet" name="person-element">
                    <xml-element-wrapper name="person-element-set"/>
                 </xml-element>
                <xml-element java-attribute="dateMap" name="date-map" >
<!--                <xml-java-type-adapter value="it.cineca.jaxb.adapter.DateMapAdapter" /> -->
                </xml-element>
                 <xml-element java-attribute="positionSet"  name="position" >
                      <xml-element-wrapper name="position-set"/>
                 </xml-element>
                <xml-element java-attribute="addressSet" name="address">                
                    <xml-element-wrapper name="address-set"/>
                 </xml-element>
                 <xml-element java-attribute="contactSet" name="contact">               
                    <xml-element-wrapper name="contact-set"/>
                 </xml-element>
                 <xml-element java-attribute="integerMap" name="integer-map"/>          
                 <xml-element java-attribute="blobMap" name="blob-map"/>
                 <xml-element java-attribute="clobMap" name="blob-map"/>
                 <xml-element java-attribute="gaDictionaryMap" name="ga-dictionary-map"/>
            </java-attributes>
        </java-type>
        <java-type name="Position">
               <java-attributes>
                      <xml-element java-attribute="discriminator" />
                      <xml-element java-attribute="startDate" />
                      <xml-element java-attribute="endDate"/>
                      <xml-element java-attribute="organizationUnit" name="organization-unit"/>
                      <xml-element java-attribute="positionType" name="position-type"/>
                      <xml-transient java-attribute="organizationUnitId"/>
                      <xml-transient java-attribute="person"/>
                      <xml-transient java-attribute="positionTypeId"/>
                      <xml-transient java-attribute="fileInfo"/>
                      <xml-transient java-attribute="personId"/>
                      <xml-transient java-attribute="priority"/>
                      <xml-transient java-attribute="uniqueIdentifier"/>
                      <xml-transient java-attribute="uuid"/>
                      <xml-transient java-attribute="removeFile"/>
               </java-attributes>
        </java-type>
       <java-type name="OrganizationUnit">
               <java-attributes>
                    <xml-element java-attribute="displayValue" />
                    <xml-element java-attribute="organizationUnitType"  name="organization-unit-type"/>
                    <xml-element java-attribute="stringMap" name="string-map" />
                    <xml-element java-attribute="dateMap" name="date-map" />
                    <xml-element java-attribute="startDate" />
                    <xml-element java-attribute="endDate" />        
                    <xml-transient java-attribute="addressSet"/>
                    <xml-transient java-attribute="contactSet"/>
                    <xml-transient java-attribute="blobMap"/>
                    <xml-transient java-attribute="clobMap"/>
                    <xml-transient java-attribute="childOrganizationUnitLinkSet" />
                    <xml-transient java-attribute="dataSet"/>
                    <xml-transient java-attribute="displayAs"/>
                    <xml-transient java-attribute="discriminatorSet"/>
                    <xml-transient java-attribute="lastModified"/>
                    <xml-transient java-attribute="lastModifiedString"/>
                    <xml-transient java-attribute="organizationUnitTypeId"/>
                    <xml-transient java-attribute="description"/>
                    <xml-transient java-attribute="parentOrganizationUnitLinkSet" />
                    <xml-transient java-attribute="positionSet"/>
                    <xml-transient java-attribute="principalContactMap"/>
              </java-attributes>
        </java-type>

    </java-types>
</xml-bindings>

  ask by Sergio Bilello translate from so

未解决问题?本站智能推荐:

2回复

具有一对多关系和java.util.Map的EclipseLink JAXB(MOXy)

我正在使用EclipseLink JPA和JAXB(MOXy)将JPA实体转换为XML。 对于正常的一对多操作,系统可以正常工作,但是如果此关系是双向的,并且其中一个实体具有复合ID,则使用java.util.Map类,则系统将引发异常。 关系是: 表格1: 表2:
1回复

无法导入EclipseLink MOXy

我下载了最新的EclipseLink(2.4),并将eclipselink.jar放在我的文件夹中。 但是,我在任何地方都看不到@XmlInverseReference批注,并且无法导入org.eclipse.persistence.oxm。*;。 我究竟做错了什么? 我正在使用Net
1回复

无法让EclipseLink MOXy工作

我是JAXB的新手,我想使用EclipseLink MOXy更改默认的名称空间前缀。 我的package-info.java包含以下代码行: 我的jaxb.properties文件包含以下行: 我已将eclipselink.jar添加到CLASSPATH,package-inf
1回复

如何使用EclipseLink MOXy在JAXB中使用名称空间?

我有一个XML: 我正在使用@XmlPath映射。 但是当我运行代码时,我收到此错误: 我想知道我错过了什么?
1回复

带有不同元素名称的EclipseLink Moxy解组集合

我有一个包含ArrayList(SuperClass)属性的类。 现在,我想解组下面的XML文件,该文件在该集合中包含不同的元素名称,因为它们是超类的子类。 有办法用Moxy做到这一点吗? querySpaceCommunicationServiceProfileFailedRetu
1回复

解组所需的EclipseLink Moxy最小库

在过去的几天中,我一直在与EclipseLink合作来实现我们的小型转换器应用程序之一。 这些输入通常是一种文档格式类型,现在是将来的一种复杂的元数据xml。 既然我们有一个这样的架构,并且在将来仍然会有微小的变化,所以我想尝试一下JAXB方法,到目前为止,我非常喜欢它。 但是,当
1回复

使用Eclipselink和Moxy编写List 提交

我正在使用Eclipselink JPA并拥有一组数据库实体,我想写一个文件,以防我的数据库连接在后续查询中不可用。 我想使用Moxy简单地编组我的整个结果集,然后在以后的时间解密该文件,从而重新创建我的原始结果集(这是我的JPA实体对象)。 由于Eclipselink和Moxy有些集成,我
1回复

EclipseLink MOXy由于软件包结构而异常

我有这个绑定文件 可以从此绑定文件中读取包的结构和类的位置。 取消编组时,出现以下异常。 有人可以告诉我为什么以及如何解决问题吗? 我不想更改我的包裹结构。
1回复

EclipseLink MOXy:覆盖绑定文件的规则

在以下情况下,我希望将java-type name="SubClass"的绑定应用于设置SuperClass上的文本字段。 但是事实并非如此。 覆盖bindingsA.xml是否有问题? 根据覆盖规则文档 : 如果多个文件中出现相同的Java类型,则在后一个文件中设置的任何值都将
1回复

将EclipseLink MOXy与Java 1.5结合使用

有人让EclipseLink MOXy(我正在使用eclipselink 2.1.0)与Java 5一起使用吗? 每当我尝试解组时,org.eclipse.persistence.oxm.record.UnmarshalRecord中的startCDATA()方法中都会得到一个空指针异常(xP