Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 229764 Details for
Bug 397316
orm.xml schema validation does not work
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Proposed changes (master & 2.5)
patch397316.patch (text/plain), 31.40 KB, created by
Guy Pelletier
on 2013-04-16 09:59:58 EDT
(
hide
)
Description:
Proposed changes (master & 2.5)
Filename:
MIME Type:
Creator:
Guy Pelletier
Created:
2013-04-16 09:59:58 EDT
Size:
31.40 KB
patch
obsolete
>From 0dd43d0883615db524a73c5265e960abd4d628e3 Mon Sep 17 00:00:00 2001 >From: Guy Pelletier <guy.pelletier@oracle.com> >Date: Fri, 12 Apr 2013 14:54:05 -0400 >Subject: [PATCH] Bug 397316 - orm.xml schema validation does not work > >Reviewed: Tom Ware >--- > .../eclipselink-jpa21-model/advanced-ddl-orm.xml | 111 +++++++++++---------- > .../eclipselink-jpa21-model/advanced-orm.xml | 40 ++++---- > .../resource/eclipselink-plsql-model/plsql-orm.xml | 4 +- > .../advanced-tpt-multitenant-entity-mappings.xml | 2 +- > .../models/jpa21/advanced/xml/Employee.java | 10 ++ > .../testing/models/jpa21/advanced/xml/Runner.java | 25 +++++ > .../models/jpa21/advanced/xml/ddl/Runner.java | 28 ++++++ > .../persistence/jpa/eclipselink_orm_2_5.xsd | 20 ++-- > .../xml/XMLEntityMappingsMappingProject.java | 27 +++-- > .../jpa/metadata/xml/XMLEntityMappingsReader.java | 23 +++++ > 10 files changed, 197 insertions(+), 93 deletions(-) > >diff --git a/jpa/eclipselink.jpa.test/resource/eclipselink-jpa21-model/advanced-ddl-orm.xml b/jpa/eclipselink.jpa.test/resource/eclipselink-jpa21-model/advanced-ddl-orm.xml >index b1e370a..91e0363 100644 >--- a/jpa/eclipselink.jpa.test/resource/eclipselink-jpa21-model/advanced-ddl-orm.xml >+++ b/jpa/eclipselink.jpa.test/resource/eclipselink-jpa21-model/advanced-ddl-orm.xml >@@ -37,6 +37,20 @@ > </element-collection> > </attributes> > </mapped-superclass> >+ >+ <mapped-superclass class="Utensil"> >+ <attributes> >+ <id name="id"> >+ <generated-value strategy="TABLE" generator="XML_UTENSIL_ID_GENERATOR"/> >+ <table-generator name="XML_UTENSIL_ID_GENERATOR" table="JPA21_XML_PK_SEQ" pk-column-name="XML_SEQ_NAME" value-column-name="XML_SEQ_COUNT" pk-column-value="XML_UTENSIL_SEQ"> >+ <index name="XML_TABLE_GENERATOR_INDEX" column-list="XML_SEQ_COUNT,XML_SEQ_NAME"/> >+ </table-generator> >+ </id> >+ <basic name="serialTag"> >+ <column name="SERIAL_TAG"/> >+ </basic> >+ </attributes> >+ </mapped-superclass> > > <entity name="XMLRunner" class="Runner"> > <table name="JPA21_XML_DLL_RUNNER"/> >@@ -63,7 +77,9 @@ > <inverse-foreign-key name="XMLRunners_Races_Inverse_Foreign_Key" foreign-key-definition="FOREIGN KEY (RACE_ID) REFERENCES JPA21_XML_DDL_RACE (ID)"/> > </join-table> > </many-to-many> >- <element-collection name="personalBests"> >+ <!-- Currently a convert can not be specified with a column as a --> >+ <!-- result of JPA 2.1 xsd bug. Until it is fixed, this is mapped in annotations --> >+ <!-- element-collection name="personalBests"> > <map-key-convert converter="org.eclipse.persistence.testing.models.jpa21.advanced.converters.DistanceConverter"/> > <map-key-column name="DISTANCE"/> > <column name="TIME"/> >@@ -72,7 +88,7 @@ > <join-column name="RUNNER_ID"/> > <foreign-key name="XML_Runner_PBS_Foreign_Key" foreign-key-definition="FOREIGN KEY (RUNNER_ID) REFERENCES JPA21_XML_DDL_RUNNER (ID)"/> > </collection-table> >- </element-collection> >+ </element-collection --> > <embedded name="info"> > <convert attribute-name="level" converter="org.eclipse.persistence.testing.models.jpa21.advanced.converters.LevelConverter"/> > <convert attribute-name="health" converter="org.eclipse.persistence.testing.models.jpa21.advanced.converters.HealthConverter"/> >@@ -148,58 +164,6 @@ > </attributes> > </entity> > >- <embeddable class="RunnerInfo"> >- <attributes> >- <basic name="level"> >- <column name="R_LEVEL"/> >- </basic> >- <basic name="health"> >- <column name="R_HEALTH"/> >- </basic> >- </attributes> >- </embeddable> >- >- <embeddable class="RunnerStatus"> >- <attributes> >- <basic name="runningStatus"> >- <column name="R_STATUS"/> >- </basic> >- </attributes> >- </embeddable> >- >- <embeddable class="Responsibility"> >- <attributes> >- <basic name="uniqueIdentifier"/> >- <basic name="description"/> >- </attributes> >- </embeddable> >- >- <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.AccomplishmentConverter"/> >- <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.AgeConverter"/> >- <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.DateConverter"/> >- <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.DistanceConverter"/> >- <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.GenderConverter"/> >- <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.HealthConverter"/> >- <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.LevelConverter"/> >- <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.LongToStringConverter" auto-apply="true"/> >- <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.ResponsibilityConverter"/> >- <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.RunningStatusConverter"/> >- <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.TimeConverter"/> >- >- <mapped-superclass class="Utensil"> >- <attributes> >- <id name="id"> >- <generated-value strategy="TABLE" generator="XML_UTENSIL_ID_GENERATOR"/> >- <table-generator name="XML_UTENSIL_ID_GENERATOR" table="JPA21_XML_PK_SEQ" pk-column-name="XML_SEQ_NAME" value-column-name="XML_SEQ_COUNT" pk-column-value="XML_UTENSIL_SEQ"> >- <index name="XML_TABLE_GENERATOR_INDEX" column-list="XML_SEQ_COUNT,XML_SEQ_NAME"/> >- </table-generator> >- </id> >- <basic name="serialTag"> >- <column name="SERIAL_TAG"/> >- </basic> >- </attributes> >- </mapped-superclass> >- > <entity name="XMLFork" class="Fork"> > <table name="JPA21_XML_FORK"> > <!-- default the name to JPA21_XML_FORK_INDEX_STYLE_COLOR --> >@@ -239,7 +203,44 @@ > </id> > <many-to-many name="forks" mapped-by="users"/> > </attributes> >- > </entity> >+ >+ <embeddable class="RunnerInfo"> >+ <attributes> >+ <basic name="level"> >+ <column name="R_LEVEL"/> >+ </basic> >+ <basic name="health"> >+ <column name="R_HEALTH"/> >+ </basic> >+ </attributes> >+ </embeddable> >+ >+ <embeddable class="RunnerStatus"> >+ <attributes> >+ <basic name="runningStatus"> >+ <column name="R_STATUS"/> >+ </basic> >+ </attributes> >+ </embeddable> >+ >+ <embeddable class="Responsibility"> >+ <attributes> >+ <basic name="uniqueIdentifier"/> >+ <basic name="description"/> >+ </attributes> >+ </embeddable> >+ >+ <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.AccomplishmentConverter"/> >+ <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.AgeConverter"/> >+ <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.DateConverter"/> >+ <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.DistanceConverter"/> >+ <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.GenderConverter"/> >+ <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.HealthConverter"/> >+ <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.LevelConverter"/> >+ <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.LongToStringConverter" auto-apply="true"/> >+ <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.ResponsibilityConverter"/> >+ <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.RunningStatusConverter"/> >+ <converter class="org.eclipse.persistence.testing.models.jpa21.advanced.converters.TimeConverter"/> > > </entity-mappings> >diff --git a/jpa/eclipselink.jpa.test/resource/eclipselink-jpa21-model/advanced-orm.xml b/jpa/eclipselink.jpa.test/resource/eclipselink-jpa21-model/advanced-orm.xml >index 3693435..200c257 100644 >--- a/jpa/eclipselink.jpa.test/resource/eclipselink-jpa21-model/advanced-orm.xml >+++ b/jpa/eclipselink.jpa.test/resource/eclipselink-jpa21-model/advanced-orm.xml >@@ -111,9 +111,6 @@ > <table-generator name="XML_DEPT_TABLE_GENERATOR" table="JPA21_XML_SEQ" pk-column-name="SEQ_NAME" value-column-name="SEQ_COUNT" pk-column-value="XML_DEPT_SEQ"/> > </id> > <basic name="name"/> >- <one-to-one name="departmentHead"> >- <join-column name="DEPT_HEAD" nullable="true"/> >- </one-to-one> > <one-to-many name="managers"> > <join-table name="JPA21_XML_DEPT_EMP"> > <join-column name="DEPT_ID"/> >@@ -124,6 +121,9 @@ > </cascade> > </one-to-many> > <one-to-many name="employees" mapped-by="department"/> >+ <one-to-one name="departmentHead"> >+ <join-column name="DEPT_HEAD" nullable="true"/> >+ </one-to-one> > </attributes> > </entity> > >@@ -132,10 +132,11 @@ > <secondary-table name="JPA21_XML_SALARY"> > <primary-key-join-column name="EMP_ID" referenced-column-name="EMP_ID"/> > </secondary-table> >- <object-type-converter name="sex" data-type="String" object-type="Employee$Gender"> >+ <!-- Invalid JPA 2.1 orm.xml content, moved to class. --> >+ <!-- object-type-converter name="sex" data-type="String" object-type="Employee$Gender"> > <conversion-value data-value="F" object-value="Female"/> > <conversion-value data-value="M" object-value="Male"/> >- </object-type-converter> >+ </object-type-converter --> > <named-stored-procedure-query name="XMLReadUsingMultipleResultSetMappings" procedure-name="XML_Read_Multiple_Result_Sets"> > <result-set-mapping>XMLEmployeeResultSetMapping</result-set-mapping> > <result-set-mapping>XMLAddressResultSetMapping</result-set-mapping> >@@ -143,12 +144,12 @@ > <result-set-mapping>XMLEmployeeConstructorResultSetMapping</result-set-mapping> > </named-stored-procedure-query> > <named-stored-procedure-query name="XMLReadUsingUnNamedRefCursor" procedure-name="XML_Read_Using_UnNamed_Cursor"> >- <parameter mode="REF_CURSOR" type="Void"/> >+ <parameter mode="REF_CURSOR" class="Void"/> > <result-class>Employee</result-class> > </named-stored-procedure-query> > <named-stored-procedure-query name="XMLReadUsingNamedRefCursors" procedure-name="XML_Read_Using_Named_Cursor"> >- <parameter name="CUR1" mode="REF_CURSOR" type="Void"/> >- <parameter name="CUR2" mode="REF_CURSOR" type="Void"/> >+ <parameter name="CUR1" mode="REF_CURSOR" class="Void"/> >+ <parameter name="CUR2" mode="REF_CURSOR" class="Void"/> > <result-class>Employee</result-class> > <result-class>Address</result-class> > </named-stored-procedure-query> >@@ -157,10 +158,10 @@ > </sql-result-set-mapping> > <sql-result-set-mapping name="XMLEmployeeConstructorResultSetMapping"> > <constructor-result target-class="EmployeeDetails"> >- <column-result name="EMP_ID" class="Integer"/> >- <column-result name="F_NAME" class="String"/> >- <column-result name="L_NAME" class="String"/> >- <column-result name="R_COUNT" class="Integer"/> >+ <column name="EMP_ID" class="Integer"/> >+ <column name="F_NAME" class="String"/> >+ <column name="L_NAME" class="String"/> >+ <column name="R_COUNT" class="Integer"/> > </constructor-result> > </sql-result-set-mapping> > <named-entity-graph> >@@ -185,9 +186,10 @@ > <basic name="lastName"> > <column name="L_NAME"/> > </basic> >- <basic name="gender"> >+ <!-- Invalid JPA 2.1 orm.xml content, moved to class. --> >+ <!-- basic name="gender"> > <convert>sex</convert> >- </basic> >+ </basic --> > <basic name="salary"> > <column table="JPA21_XML_SALARY"/> > </basic> >@@ -260,7 +262,6 @@ > <discriminator-value>P</discriminator-value> > <discriminator-column name="PROJ_TYPE"/> > <sql-result-set-mapping name="XMLProjectResultSetMapping"> >- <column-result name="BUDGET_SUM"/> > <entity-result entity-class="Project"/> > <entity-result entity-class="SmallProject" discriminator-column="SMALL_DESCRIM"> > <field-result name="id" column="SMALL_ID"/> >@@ -269,13 +270,14 @@ > <field-result name="teamLeader" column="SMALL_TEAMLEAD"/> > <field-result name="version" column="SMALL_VERSION"/> > </entity-result> >+ <column-result name="BUDGET_SUM"/> > </sql-result-set-mapping> > <pre-persist method-name="prePersist"/> > <post-persist method-name="postPersist"/> > <pre-remove method-name="preRemove"/> > <post-remove method-name="postRemove"/> >- <post-update method-name="postUpdate"/> > <pre-update method-name="preUpdate"/> >+ <post-update method-name="postUpdate"/> > <post-load method-name="postLoad"/> > <attributes> > <id name="id"> >@@ -373,7 +375,9 @@ > <inverse-join-column name="RACE_ID" referenced-column-name="ID"/> > </join-table> > </many-to-many> >- <element-collection name="personalBests"> >+ <!-- Currently a convert can not be specified with a column as a --> >+ <!-- result of JPA 2.1 xsd bug. Until it is fixed, this is mapped in annotations --> >+ <!-- element-collection name="personalBests"> > <map-key-convert converter="org.eclipse.persistence.testing.models.jpa21.advanced.converters.DistanceConverter"/> > <map-key-column name="DISTANCE"/> > <column name="TIME"/> >@@ -381,7 +385,7 @@ > <collection-table name="JPA21_XML_RUNNER_PBS"> > <join-column name="RUNNER_ID"/> > </collection-table> >- </element-collection> >+ </element-collection --> > <embedded name="info"> > <convert attribute-name="level" converter="org.eclipse.persistence.testing.models.jpa21.advanced.converters.LevelConverter"/> > <convert attribute-name="health" converter="org.eclipse.persistence.testing.models.jpa21.advanced.converters.HealthConverter"/> >diff --git a/jpa/eclipselink.jpa.test/resource/eclipselink-plsql-model/plsql-orm.xml b/jpa/eclipselink.jpa.test/resource/eclipselink-plsql-model/plsql-orm.xml >index 895a1d0..3f5f601 100644 >--- a/jpa/eclipselink.jpa.test/resource/eclipselink-plsql-model/plsql-orm.xml >+++ b/jpa/eclipselink.jpa.test/resource/eclipselink-plsql-model/plsql-orm.xml >@@ -75,8 +75,8 @@ > </plsql-record> > <plsql-table name="PLSQL_P.PLSQL_ADDRESS_LIST" compatible-type="PLSQL_P_PLSQL_ADDRESS_LIST" nested-type="PLSQL_P.PLSQL_ADDRESS_REC"/> > <plsql-table name="PLSQL_P.PLSQL_PHONE_LIST" compatible-type="PLSQL_P_PLSQL_PHONE_LIST" nested-type="PLSQL_P.PLSQL_PHONE_REC"/> >- <oracle-array name="VARRAY_NUMERO_UNO" nestedType="VARCHAR"/> >- <oracle-array name="VARRAY_NUMERO_DOS" nestedType="NUMBER"/> >+ <oracle-array name="VARRAY_NUMERO_UNO" nested-type="VARCHAR"/> >+ <oracle-array name="VARRAY_NUMERO_DOS" nested-type="NUMBER"/> > <oracle-object name="OBJECT_NUMERO_UNO"> > <field name="OO_FLD1" database-type="VARCHAR_TYPE"/> > <field name="OO_FLD2" database-type="NUMERIC_TYPE"/> >diff --git a/jpa/eclipselink.jpa.test/resource/eclipselinkorm/eclipselink-xml-extended-model/advanced-tpt-multitenant-entity-mappings.xml b/jpa/eclipselink.jpa.test/resource/eclipselinkorm/eclipselink-xml-extended-model/advanced-tpt-multitenant-entity-mappings.xml >index 00c1047..0ea82a1 100644 >--- a/jpa/eclipselink.jpa.test/resource/eclipselinkorm/eclipselink-xml-extended-model/advanced-tpt-multitenant-entity-mappings.xml >+++ b/jpa/eclipselink.jpa.test/resource/eclipselinkorm/eclipselink-xml-extended-model/advanced-tpt-multitenant-entity-mappings.xml >@@ -96,8 +96,8 @@ > </join-table> > </many-to-many> > <element-collection name="honors"> >- <collection-table name="XML_CANDIDATE_HONORS"/> > <column name="HONOR"/> >+ <collection-table name="XML_CANDIDATE_HONORS"/> > </element-collection> > </attributes> > </entity> >diff --git a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa21/advanced/xml/Employee.java b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa21/advanced/xml/Employee.java >index 8f1a20a..8e397e0 100644 >--- a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa21/advanced/xml/Employee.java >+++ b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa21/advanced/xml/Employee.java >@@ -27,6 +27,15 @@ import org.eclipse.persistence.config.QueryHints; > import org.eclipse.persistence.sessions.Record; > import org.eclipse.persistence.sessions.Session; > >+@ObjectTypeConverter( >+ name="sex", >+ dataType=String.class, >+ objectType=org.eclipse.persistence.testing.models.jpa21.advanced.xml.Employee.Gender.class, >+ conversionValues={ >+ @ConversionValue(dataValue="F", objectValue="Female"), >+ @ConversionValue(dataValue="M", objectValue="Male") >+ } >+ ) > public class Employee implements Serializable, Cloneable { > public enum EmployeeStatus {FULL_TIME, PART_TIME, CONTRACT} > public enum Gender { Female, Male } >@@ -37,6 +46,7 @@ public class Employee implements Serializable, Cloneable { > private Integer id; > private Integer version; > >+ @Convert("sex") > private Gender gender; > private EmployeeStatus status; > >diff --git a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa21/advanced/xml/Runner.java b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa21/advanced/xml/Runner.java >index b1c9554..b9e8803 100644 >--- a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa21/advanced/xml/Runner.java >+++ b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa21/advanced/xml/Runner.java >@@ -22,6 +22,17 @@ import java.util.HashMap; > import java.util.List; > import java.util.Map; > >+import javax.persistence.CollectionTable; >+import javax.persistence.Column; >+import javax.persistence.Convert; >+import javax.persistence.Converts; >+import javax.persistence.ForeignKey; >+import javax.persistence.ElementCollection; >+import javax.persistence.JoinColumn; >+import javax.persistence.MapKeyColumn; >+ >+import org.eclipse.persistence.testing.models.jpa21.advanced.converters.DistanceConverter; >+import org.eclipse.persistence.testing.models.jpa21.advanced.converters.TimeConverter; > import org.eclipse.persistence.testing.models.jpa21.advanced.enums.Gender; > > public class Runner extends Athlete { >@@ -30,6 +41,20 @@ public class Runner extends Athlete { > protected RunnerInfo info; > protected List<Race> races; > protected Map<ShoeTag, Shoe> shoes; >+ >+ // This is mapped here until the JPA schema is corrected. Currently >+ // cannot specify a convert with a column in JPA (with XML validation on) >+ @ElementCollection >+ @Column(name="TIME") >+ @MapKeyColumn(name="DISTANCE") >+ @CollectionTable( >+ name="JPA21_XML_RUNNER_PBS", >+ joinColumns=@JoinColumn(name="RUNNER_ID") >+ ) >+ @Converts({ >+ @Convert(attributeName="key", converter = DistanceConverter.class), >+ @Convert(converter = TimeConverter.class) >+ }) > protected Map<String, String> personalBests; > > public Runner() { >diff --git a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa21/advanced/xml/ddl/Runner.java b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa21/advanced/xml/ddl/Runner.java >index 0504c07..a9965de 100644 >--- a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa21/advanced/xml/ddl/Runner.java >+++ b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa21/advanced/xml/ddl/Runner.java >@@ -18,6 +18,17 @@ import java.util.HashMap; > import java.util.List; > import java.util.Map; > >+import javax.persistence.CollectionTable; >+import javax.persistence.Column; >+import javax.persistence.Convert; >+import javax.persistence.Converts; >+import javax.persistence.ElementCollection; >+import javax.persistence.ForeignKey; >+import javax.persistence.JoinColumn; >+import javax.persistence.MapKeyColumn; >+ >+import org.eclipse.persistence.testing.models.jpa21.advanced.converters.DistanceConverter; >+import org.eclipse.persistence.testing.models.jpa21.advanced.converters.TimeConverter; > import org.eclipse.persistence.testing.models.jpa21.advanced.enums.Gender; > > public class Runner extends Athlete { >@@ -26,6 +37,23 @@ public class Runner extends Athlete { > protected RunnerInfo info; > protected List<Race> races; > protected Map<ShoeTag, Shoe> shoes; >+ >+ // This is mapped here until the JPA schema is corrected. Currently >+ // cannot specify a convert with a column in JPA (with XML validation on) >+ @ElementCollection >+ @Column(name="TIME") >+ @MapKeyColumn(name="DISTANCE") >+ @CollectionTable( >+ name="JPA21_XML_DDL_RUNNER_PBS", >+ joinColumns=@JoinColumn(name="RUNNER_ID"), >+ foreignKey=@ForeignKey( >+ name="XML_Runner_PBS_Foreign_Key", >+ foreignKeyDefinition="FOREIGN KEY (RUNNER_ID) REFERENCES JPA21_XML_DDL_RUNNER (ID)") >+ ) >+ @Converts({ >+ @Convert(attributeName="key", converter = DistanceConverter.class), >+ @Convert(converter = TimeConverter.class) >+ }) > protected Map<String, String> personalBests; > > public Runner() { >diff --git a/jpa/org.eclipse.persistence.jpa/resource/org/eclipse/persistence/jpa/eclipselink_orm_2_5.xsd b/jpa/org.eclipse.persistence.jpa/resource/org/eclipse/persistence/jpa/eclipselink_orm_2_5.xsd >index ba37026..9a2a2db 100644 >--- a/jpa/org.eclipse.persistence.jpa/resource/org/eclipse/persistence/jpa/eclipselink_orm_2_5.xsd >+++ b/jpa/org.eclipse.persistence.jpa/resource/org/eclipse/persistence/jpa/eclipselink_orm_2_5.xsd >@@ -2138,7 +2138,7 @@ > </xsd:documentation> > </xsd:annotation> > <xsd:sequence> >- <xsd:element name="column-result" type="orm:column-result" minOccurs="0" maxOccurs="unbounded"/> >+ <xsd:element name="column" type="orm:column-result" minOccurs="0" maxOccurs="unbounded"/> > </xsd:sequence> > <xsd:attribute name="target-class" type="xsd:string" use="required"/> > </xsd:complexType> >@@ -2326,20 +2326,20 @@ > </xsd:choice> > </xsd:sequence> > </xsd:choice> >+ <xsd:element name="column" type="orm:column" minOccurs="0"/> > <xsd:choice> > <xsd:sequence> >- <xsd:element name="column" type="orm:column" minOccurs="0"/> > <xsd:choice> > <xsd:element name="temporal" type="orm:temporal" minOccurs="0"/> > <xsd:element name="enumerated" type="orm:enumerated" minOccurs="0"/> > <xsd:element name="lob" type="orm:lob" minOccurs="0"/> > </xsd:choice> > </xsd:sequence> >- <xsd:choice minOccurs="0" maxOccurs="unbounded"> >- <xsd:element name="attribute-override" type="orm:attribute-override"/> >- <xsd:element name="association-override" type="orm:association-override"/> >- <xsd:element name="convert" type="orm:convert"/> >- </xsd:choice> >+ <xsd:sequence> >+ <xsd:element name="attribute-override" type="orm:attribute-override" minOccurs="0" maxOccurs="unbounded"/> >+ <xsd:element name="association-override" type="orm:association-override" minOccurs="0" maxOccurs="unbounded"/> >+ <xsd:element name="convert" type="orm:convert" minOccurs="0" maxOccurs="unbounded"/> >+ </xsd:sequence> > </xsd:choice> > <xsd:choice minOccurs="0" maxOccurs="2"> > <xsd:element name="converter" type="orm:converter"/> >@@ -2347,9 +2347,9 @@ > <xsd:element name="object-type-converter" type="orm:object-type-converter"/> > <xsd:element name="struct-converter" type="orm:struct-converter"/> > </xsd:choice> >- <xsd:choice> >- <xsd:element name="collection-table" type="orm:collection-table" minOccurs="0"/> >- <xsd:element name="field" type="orm:field" minOccurs="0"/> >+ <xsd:choice minOccurs="0"> >+ <xsd:element name="collection-table" type="orm:collection-table"/> >+ <xsd:element name="field" type="orm:field"/> > </xsd:choice> > <xsd:element name="cascade-on-delete" type="xsd:boolean" minOccurs="0"/> > <xsd:element name="join-fetch" type="orm:join-fetch-type" minOccurs="0"/> >diff --git a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/xml/XMLEntityMappingsMappingProject.java b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/xml/XMLEntityMappingsMappingProject.java >index 8aea984..0f3fdfd 100644 >--- a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/xml/XMLEntityMappingsMappingProject.java >+++ b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/xml/XMLEntityMappingsMappingProject.java >@@ -1031,7 +1031,7 @@ public class XMLEntityMappingsMappingProject extends org.eclipse.persistence.ses > descriptor.setJavaClass(ConstructorResultMetadata.class); > > // Element mappings - must remain in order of definition in XML. >- descriptor.addMapping(getColumnResultsMapping()); >+ descriptor.addMapping(getConstructorColumnMapping()); > > // Attribute mappings. > descriptor.addMapping(getTargetClassAttributeMapping()); >@@ -3231,9 +3231,9 @@ public class XMLEntityMappingsMappingProject extends org.eclipse.persistence.ses > descriptor.setJavaClass(SQLResultSetMappingMetadata.class); > > // Element mappings - must remain in order of definition in XML. >- descriptor.addMapping(getEntityResultsMapping()); >- descriptor.addMapping(getConstructorResultsMapping()); >- descriptor.addMapping(getColumnResultsMapping()); >+ descriptor.addMapping(getEntityResultMapping()); >+ descriptor.addMapping(getConstructorResultMapping()); >+ descriptor.addMapping(getColumnResultMapping()); > > // Attribute mappings. > descriptor.addMapping(getNameAttributeMapping()); >@@ -4185,7 +4185,7 @@ public class XMLEntityMappingsMappingProject extends org.eclipse.persistence.ses > /** > * INTERNAL: > */ >- protected XMLCompositeCollectionMapping getColumnResultsMapping() { >+ protected XMLCompositeCollectionMapping getColumnResultMapping() { > XMLCompositeCollectionMapping mapping = new XMLCompositeCollectionMapping(); > mapping.setAttributeName("m_columnResults"); > mapping.setGetMethodName("getColumnResults"); >@@ -4258,7 +4258,20 @@ public class XMLEntityMappingsMappingProject extends org.eclipse.persistence.ses > /** > * INTERNAL: > */ >- protected XMLCompositeCollectionMapping getConstructorResultsMapping() { >+ protected XMLCompositeCollectionMapping getConstructorColumnMapping() { >+ XMLCompositeCollectionMapping mapping = new XMLCompositeCollectionMapping(); >+ mapping.setAttributeName("m_columnResults"); >+ mapping.setGetMethodName("getColumnResults"); >+ mapping.setSetMethodName("setColumnResults"); >+ mapping.setReferenceClass(ColumnResultMetadata.class); >+ mapping.setXPath("orm:column"); >+ return mapping; >+ } >+ >+ /** >+ * INTERNAL: >+ */ >+ protected XMLCompositeCollectionMapping getConstructorResultMapping() { > XMLCompositeCollectionMapping mapping = new XMLCompositeCollectionMapping(); > mapping.setAttributeName("m_constructorResults"); > mapping.setGetMethodName("getConstructorResults"); >@@ -4497,7 +4510,7 @@ public class XMLEntityMappingsMappingProject extends org.eclipse.persistence.ses > /** > * INTERNAL: > */ >- protected XMLCompositeCollectionMapping getEntityResultsMapping() { >+ protected XMLCompositeCollectionMapping getEntityResultMapping() { > XMLCompositeCollectionMapping mapping = new XMLCompositeCollectionMapping(); > mapping.setAttributeName("m_entityResults"); > mapping.setGetMethodName("getEntityResults"); >diff --git a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/xml/XMLEntityMappingsReader.java b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/xml/XMLEntityMappingsReader.java >index 7da92b2..d1fb497 100644 >--- a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/xml/XMLEntityMappingsReader.java >+++ b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/xml/XMLEntityMappingsReader.java >@@ -40,14 +40,17 @@ import javax.xml.validation.Schema; > import javax.xml.validation.SchemaFactory; > > import org.eclipse.persistence.config.PersistenceUnitProperties; >+import org.eclipse.persistence.exceptions.EclipseLinkException; > import org.eclipse.persistence.exceptions.ValidationException; > import org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider; > > import org.eclipse.persistence.oxm.XMLConstants; > import org.eclipse.persistence.oxm.XMLContext; > import org.eclipse.persistence.oxm.XMLUnmarshaller; >+import org.xml.sax.ErrorHandler; > import org.xml.sax.InputSource; > import org.xml.sax.SAXException; >+import org.xml.sax.SAXParseException; > import org.xml.sax.XMLReader; > > /** >@@ -362,6 +365,26 @@ public class XMLEntityMappingsReader { > */ > private static void useLocalSchemaForUnmarshaller(XMLUnmarshaller unmarshaller, Schema schema) { > try { >+ >+ unmarshaller.setErrorHandler(new ErrorHandler() { >+ @Override >+ public void error(SAXParseException exception) throws SAXException { >+ throw exception; >+ } >+ >+ @Override >+ public void fatalError(SAXParseException exception) throws SAXException { >+ throw exception; >+ } >+ >+ @Override >+ public void warning(SAXParseException exception) throws SAXException { >+ if (exception.getException() instanceof EclipseLinkException) { >+ throw (EclipseLinkException) exception.getCause(); >+ } >+ } >+ }); >+ > unmarshaller.setSchema(schema); > } catch (UnsupportedOperationException ex) { > // Some parsers do not support setSchema. In that case, setup validation another way. >-- >1.7.11.msysgit.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 397316
: 229764 |
229776