mirror of https://github.com/apache/openjpa.git
OPENJPA-213
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@658197 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
8c756bf655
commit
3a5e61238d
|
@ -1499,7 +1499,7 @@ public class DBDictionary
|
||||||
case JavaTypes.BIGDECIMAL:
|
case JavaTypes.BIGDECIMAL:
|
||||||
if (storeLargeNumbersAsStrings)
|
if (storeLargeNumbersAsStrings)
|
||||||
return getPreferredType(Types.VARCHAR);
|
return getPreferredType(Types.VARCHAR);
|
||||||
return getPreferredType(Types.DOUBLE);
|
return getPreferredType(Types.NUMERIC);
|
||||||
case JavaTypes.NUMBER:
|
case JavaTypes.NUMBER:
|
||||||
if (storeLargeNumbersAsStrings)
|
if (storeLargeNumbersAsStrings)
|
||||||
return getPreferredType(Types.VARCHAR);
|
return getPreferredType(Types.VARCHAR);
|
||||||
|
|
|
@ -0,0 +1,173 @@
|
||||||
|
/*
|
||||||
|
* 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 java.math.BigDecimal;
|
||||||
|
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.Version;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class PrecisionTestEntity {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue
|
||||||
|
private int id;
|
||||||
|
@Version
|
||||||
|
private int version;
|
||||||
|
|
||||||
|
private double primDbl;
|
||||||
|
private Double dbl;
|
||||||
|
private BigDecimal bigDecimal;
|
||||||
|
|
||||||
|
@Column(precision = 10)
|
||||||
|
private double primDblPrecis;
|
||||||
|
@Column(precision = 10)
|
||||||
|
private Double dblPrecis;
|
||||||
|
@Column(precision = 10)
|
||||||
|
private BigDecimal bigDecimalPrecis;
|
||||||
|
|
||||||
|
@Column(scale = 10)
|
||||||
|
private double primDblScale;
|
||||||
|
@Column(scale = 10)
|
||||||
|
private Double dblScale;
|
||||||
|
@Column(scale = 10)
|
||||||
|
private BigDecimal bigDecimalScale;
|
||||||
|
|
||||||
|
@Column(precision = 10, scale = 10)
|
||||||
|
private double primDblPrecisScale;
|
||||||
|
@Column(precision = 10, scale = 10)
|
||||||
|
private Double dblPrecisScale;
|
||||||
|
@Column(precision = 10, scale = 10)
|
||||||
|
private BigDecimal bigDecimalPrecisScale;
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVersion() {
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVersion(int version) {
|
||||||
|
this.version = version;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getPrimDbl() {
|
||||||
|
return primDbl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrimDbl(double primDbl) {
|
||||||
|
this.primDbl = primDbl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getDbl() {
|
||||||
|
return dbl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDbl(Double dbl) {
|
||||||
|
this.dbl = dbl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getBigDecimal() {
|
||||||
|
return bigDecimal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBigDecimal(BigDecimal bigDecimal) {
|
||||||
|
this.bigDecimal = bigDecimal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getPrimDblPrecis() {
|
||||||
|
return primDblPrecis;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrimDblPrecis(double primDblPrecis) {
|
||||||
|
this.primDblPrecis = primDblPrecis;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getDblPrecis() {
|
||||||
|
return dblPrecis;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDblPrecis(Double dblPrecis) {
|
||||||
|
this.dblPrecis = dblPrecis;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getBigDecimalPrecis() {
|
||||||
|
return bigDecimalPrecis;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBigDecimalPrecis(BigDecimal bigDecimalPrecis) {
|
||||||
|
this.bigDecimalPrecis = bigDecimalPrecis;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getPrimDblScale() {
|
||||||
|
return primDblScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrimDblScale(double primDblScale) {
|
||||||
|
this.primDblScale = primDblScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getDblScale() {
|
||||||
|
return dblScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDblScale(Double dblScale) {
|
||||||
|
this.dblScale = dblScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getBigDecimalScale() {
|
||||||
|
return bigDecimalScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBigDecimalScale(BigDecimal bigDecimalScale) {
|
||||||
|
this.bigDecimalScale = bigDecimalScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getPrimDblPrecisScale() {
|
||||||
|
return primDblPrecisScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrimDblPrecisScale(double primDblPrecisScale) {
|
||||||
|
this.primDblPrecisScale = primDblPrecisScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getDblPrecisScale() {
|
||||||
|
return dblPrecisScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDblPrecisScale(Double dblPrecisScale) {
|
||||||
|
this.dblPrecisScale = dblPrecisScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getBigDecimalPrecisScale() {
|
||||||
|
return bigDecimalPrecisScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBigDecimalPrecisScale(BigDecimal bigDecimalPrecisScale) {
|
||||||
|
this.bigDecimalPrecisScale = bigDecimalPrecisScale;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
/*
|
||||||
|
* 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 java.sql.Types;
|
||||||
|
|
||||||
|
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 TestPrecisionMapping extends SingleEMFTestCase {
|
||||||
|
|
||||||
|
private static final String[] _DOUBLE_FIELDS =
|
||||||
|
{ "primDbl", "dbl" };
|
||||||
|
private static final String _BIG_DECIMAL_FIELD = "bigDecimal";
|
||||||
|
|
||||||
|
public void setUp() {
|
||||||
|
setUp(PrecisionTestEntity.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testUnspecified() {
|
||||||
|
testDoubleMapping("", Types.DOUBLE,0,0);
|
||||||
|
testBigDecimalMapping("", Types.NUMERIC, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPrecisionOnly() {
|
||||||
|
// testDoubleMapping("Precis", Types.NUMERIC, 10, 0);
|
||||||
|
testBigDecimalMapping("Precis", Types.NUMERIC, 10, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testScaleOnly() {
|
||||||
|
// testDoubleMapping("Scale", Types.NUMERIC, 0 , 10);
|
||||||
|
testBigDecimalMapping("Scale", Types.NUMERIC, 0, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPrecisionAndScale() {
|
||||||
|
// testDoubleMapping("PrecisScale", Types.NUMERIC,10,10);
|
||||||
|
testBigDecimalMapping("PrecisScale", Types.NUMERIC, 10, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void testBigDecimalMapping(String fieldSuffix, int expectedType,
|
||||||
|
int expectedPrecision, int expectedScale) {
|
||||||
|
ClassMapping mapping = getMapping(PrecisionTestEntity.class);
|
||||||
|
FieldMapping fm =
|
||||||
|
mapping.getFieldMapping(_BIG_DECIMAL_FIELD + fieldSuffix);
|
||||||
|
|
||||||
|
Column[] cols = fm.getColumns();
|
||||||
|
assertEquals(1, cols.length);
|
||||||
|
assertEquals(expectedType, cols[0].getType());
|
||||||
|
assertEquals(expectedPrecision, cols[0].getSize());
|
||||||
|
assertEquals(expectedScale, cols[0].getDecimalDigits());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void testDoubleMapping(String fieldSuffix, int expectedType,
|
||||||
|
int expectedPrecision, int expectedScale) {
|
||||||
|
ClassMapping mapping = getMapping(PrecisionTestEntity.class);
|
||||||
|
FieldMapping fm;
|
||||||
|
|
||||||
|
for(String s : _DOUBLE_FIELDS) {
|
||||||
|
fm = mapping.getFieldMapping(s + fieldSuffix);
|
||||||
|
|
||||||
|
Column[] cols = fm.getColumns();
|
||||||
|
assertEquals(1, cols.length);
|
||||||
|
assertEquals(expectedType ,cols[0].getType());
|
||||||
|
assertEquals(expectedPrecision, cols[0].getSize());
|
||||||
|
assertEquals(expectedScale, cols[0].getDecimalDigits());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -68,9 +68,32 @@ public abstract class SingleEMFTestCase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the class mapping for a given entity
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
* The Entity's name.
|
||||||
|
*
|
||||||
|
* @return If the entity is a known type the ClassMapping for the Entity
|
||||||
|
* will be returned. Otherwise null
|
||||||
|
*/
|
||||||
protected ClassMapping getMapping(String name) {
|
protected ClassMapping getMapping(String name) {
|
||||||
return (ClassMapping) emf.getConfiguration()
|
return (ClassMapping) emf.getConfiguration()
|
||||||
.getMetaDataRepositoryInstance().getMetaData(name,
|
.getMetaDataRepositoryInstance().getMetaData(name,
|
||||||
getClass().getClassLoader(), true);
|
getClass().getClassLoader(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the class mapping for a given entity
|
||||||
|
*
|
||||||
|
* @param entityClass an entity class.
|
||||||
|
*
|
||||||
|
* @return If the entity is a known type the ClassMapping for the Entity
|
||||||
|
* will be returned. Otherwise null
|
||||||
|
*/
|
||||||
|
protected ClassMapping getMapping(Class<?> entityClass) {
|
||||||
|
return (ClassMapping) emf.getConfiguration()
|
||||||
|
.getMetaDataRepositoryInstance().getMetaData(entityClass,
|
||||||
|
getClass().getClassLoader(), true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue