Jaxb 一对多和多对一MOXy@XmlInverseReference EclipseLink 2.5
我将向您展示我已经拥有的类,并且我想用jaxb进行序列化。 不幸的是,当我试图序列化Person内的positionSet时,我无法完全获得Person对象内的所有属性 代码:Jaxb 一对多和多对一MOXy@XmlInverseReference EclipseLink 2.5,jaxb,eclipselink,moxy,Jaxb,Eclipselink,Moxy,我将向您展示我已经拥有的类,并且我想用jaxb进行序列化。 不幸的是,当我试图序列化Person内的positionSet时,我无法完全获得Person对象内的所有属性 代码: 公共类人物{ @身份证 @列(name=“ID”) 私有整数id; @列(name=“FIRST_name”) @非NullOnlyJSP 私有字符串名; @列(name=“LAST_name”) @非NullOnlyJSP 私有字符串lastName; @OneToMany(cascade={CascadeType.A
公共类人物{
@身份证
@列(name=“ID”)
私有整数id;
@列(name=“FIRST_name”)
@非NullOnlyJSP
私有字符串名;
@列(name=“LAST_name”)
@非NullOnlyJSP
私有字符串lastName;
@OneToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY,mappedBy=“person”)
@org.hibernate.annotations.OrderBy(子句=“开始日期asc”)
private Set positionSet=new LinkedHashSet();
//getter和setter以及其他方法。。
}
公共阶级地位{
@身份证
@列(name=“ID”)
私有整数id;
@列(name=“FK_PERSON”)
@NotNull
私有整数personId;
@列(name=“FK\U位置\U类型”)
@NotNull
私有整数positionTypeId;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“FK\u POSITION\u TYPE”,insertable=false,updateable=false)
私营实体类型;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“FK_PERSON”,insertable=false,updateable=false)
//我需要这个注释来避免ciclyc图
@XmlInverseReference(mappedBy=“positionSet”)
私人;
@列(name=“FK\U组织单元”)
@NotNull
私有整数组织ID;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“FK\u ORG\u UNIT”,可插入=false,可更新=false)
//我需要这个注释来避免ciclyc图
@XmlInverseReference(mappedBy=“organizationUnitPositionSet”)
私人组织单位;
//getter和setter以及其他方法。。
}
公营班级组织单位{
@身份证
@列(name=“ID”)
私有整数id;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“FK\U组织\U单位\U类型”,可插入=false,可更新=false)
私有组织单元类型组织单元类型;
@列(name=“FK\U组织单元类型”)
私有整数organizationUnitTypeId;
@列(name=“DESCRIPTION”,长度=4000)
@NotNull
私有字符串描述;
@OneToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY,mappedBy=“organizationUnit”)
@org.hibernate.annotations.OrderBy(子句=“开始日期asc”)
//我需要这个注释来避免ciclyc图
私有集organizationUnitPositionSet=新LinkedHashSet();
//getter和setter以及其他方法。。
}
现在,正如您所理解的,这些关系是:
个人一对多职位多对一组织单位
Position有两个属性:“positionType”和“organizationUnit”,它们引用organizationUnit
当jaxb序列化时,我只能看到positionType元素以及Position中关于organizationUnit元素的任何内容。
我试着检查位置是否包含值,我发现数据在对象内部可用。
positionType和Position类中的organizationUnit属性之间的区别在于@XmlInverseReference注释,我需要该注释用于organizationUnit类映射的organizationUnit属性,而positionType不需要该注释
我怎样才能解决这个问题?为什么注释不允许我访问organizationUnit内部位置
我希望有人能帮助我。
用于向您显示它序列化但不正确
我将向您展示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>
//其他财产
174215
支持
2005-06-30T00:00:00
1234
2733
布拉布拉
101
支持角色
2005-02-01T00:00:00
这是oxm文件:
我只是通过删除Position类内organizationUnit属性上的注释@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>
oxm文件:
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>