mirror of https://github.com/apache/openjpa.git
OPENJPA-1697: A EnumValueHandler strategy along with XmlType annotation incorrectly mapped to XmlType in create table DDL
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@955805 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
dbaf9fa67e
commit
eac9c66b74
|
@ -1534,11 +1534,11 @@ public class AnnotationPersistenceMappingParser
|
||||||
throw new MetaDataException(_loc.get("num-cols-mismatch", fm,
|
throw new MetaDataException(_loc.get("num-cols-mismatch", fm,
|
||||||
String.valueOf(cols.size()), String.valueOf(pcols.length)));
|
String.valueOf(cols.size()), String.valueOf(pcols.length)));
|
||||||
|
|
||||||
// cache the JAXB XmlType class if it is present so we do not
|
// cache the JAXB XmlRootElement class if it is present so we do not
|
||||||
// have a hard-wired dependency on JAXB here
|
// have a hard-wired dependency on JAXB here
|
||||||
Class xmlTypeClass = null;
|
Class xmlRootElementClass = null;
|
||||||
try {
|
try {
|
||||||
xmlTypeClass = Class.forName("javax.xml.bind.annotation.XmlType");
|
xmlRootElementClass = Class.forName("javax.xml.bind.annotation.XmlRootElement");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1552,12 +1552,11 @@ public class AnnotationPersistenceMappingParser
|
||||||
cols = new ArrayList<Column>(pcols.length);
|
cols = new ArrayList<Column>(pcols.length);
|
||||||
cols.add(newColumn(pcols[i], delimit()));
|
cols.add(newColumn(pcols[i], delimit()));
|
||||||
}
|
}
|
||||||
|
if (xmlRootElementClass != null
|
||||||
if (xmlTypeClass != null
|
|
||||||
&& StringUtils.isEmpty(pcols[i].columnDefinition())
|
&& StringUtils.isEmpty(pcols[i].columnDefinition())
|
||||||
&& (AccessController.doPrivileged(J2DoPrivHelper
|
&& (AccessController.doPrivileged(J2DoPrivHelper
|
||||||
.isAnnotationPresentAction(fm.getDeclaredType(),
|
.isAnnotationPresentAction(fm.getDeclaredType(),
|
||||||
xmlTypeClass))).booleanValue()) {
|
xmlRootElementClass))).booleanValue()) {
|
||||||
DBDictionary dict = ((MappingRepository) getRepository())
|
DBDictionary dict = ((MappingRepository) getRepository())
|
||||||
.getDBDictionary();
|
.getDBDictionary();
|
||||||
if (dict.supportsXMLColumn)
|
if (dict.supportsXMLColumn)
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.openjpa.persistence.jdbc.mapping;
|
||||||
|
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.EnumType;
|
||||||
|
import javax.persistence.Enumerated;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.NamedQueries;
|
||||||
|
import javax.persistence.NamedQuery;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
import javax.xml.bind.annotation.XmlEnum;
|
||||||
|
import javax.xml.bind.annotation.XmlType;
|
||||||
|
|
||||||
|
import org.apache.openjpa.persistence.Persistent;
|
||||||
|
import org.apache.openjpa.persistence.jdbc.Strategy;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name="authority")
|
||||||
|
@NamedQueries( {
|
||||||
|
@NamedQuery(name = "AllIonAuthorities", query = "SELECT x FROM IonAuthority x")
|
||||||
|
})
|
||||||
|
public class Authority {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
|
@Column(name = "ID")
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
@Enumerated( EnumType.STRING )
|
||||||
|
@Column(nullable=false, length=128, updatable=true, insertable=true)
|
||||||
|
@Persistent
|
||||||
|
@Strategy("org.apache.openjpa.jdbc.meta.strats.EnumValueHandler")
|
||||||
|
private AuthorityValues authorityName;
|
||||||
|
|
||||||
|
|
||||||
|
@XmlType(name = "IonAuthorityValues")
|
||||||
|
@XmlEnum
|
||||||
|
public enum AuthorityValues {
|
||||||
|
|
||||||
|
AUTH1,
|
||||||
|
AUTH2,
|
||||||
|
}
|
||||||
|
|
||||||
|
public Authority() {}
|
||||||
|
public Authority(AuthorityValues auth) {
|
||||||
|
authorityName = auth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthorityName(AuthorityValues auth) {
|
||||||
|
authorityName = auth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AuthorityValues getAuthorityName() {
|
||||||
|
return authorityName;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.openjpa.persistence.jdbc.mapping;
|
||||||
|
|
||||||
|
import org.apache.openjpa.jdbc.meta.ClassMapping;
|
||||||
|
import org.apache.openjpa.jdbc.meta.FieldMapping;
|
||||||
|
import org.apache.openjpa.jdbc.schema.Column;
|
||||||
|
import org.apache.openjpa.persistence.test.SingleEMFTestCase;
|
||||||
|
|
||||||
|
public class TestEnumXmlTypeMapping extends SingleEMFTestCase {
|
||||||
|
|
||||||
|
public void setUp() {
|
||||||
|
setUp(Authority.class, DROP_TABLES);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testEnumXmlType() {
|
||||||
|
ClassMapping mapping = getMapping(Authority.class);
|
||||||
|
FieldMapping fm = mapping.getFieldMapping("authorityName");
|
||||||
|
Column[] cols = fm.getColumns();
|
||||||
|
assertFalse(cols[0].isXML());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue