org.eclipse.persistence.mappings.structures.ObjectRelationalDatabaseField Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eclipselink Show documentation
Show all versions of eclipselink Show documentation
EclipseLink build based upon Git transaction f2b9fc5
/*
* Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.mappings.structures;
import org.eclipse.persistence.internal.helper.DatabaseField;
/**
* INTERNAL:
* A database field of object-relational type: either a java.sql.Array,
* java.sql.Struct, or java.sql.Ref.
* Oracle drivers require the user defined field type name for these fields,
* along with the generic sqlType: ARRAY, STRUCT, or REF.
* Toplink can only recognize primitive field types like Integer
* or String, but here custom java objects are being written to a single field.
* Thus instead of DatabaseField#type the driver needs a string representing
* the user defined type of the structure on the database, and the type of
* field: either ARRAY, STRUCT, or REF.
* Added for bug 2730536.
* @author Stephen McRitchie
* @since OracleAS TopLink 10g (9.0.4)
*/
public class ObjectRelationalDatabaseField extends DatabaseField {
protected String sqlTypeName;
protected DatabaseField nestedTypeField;
public ObjectRelationalDatabaseField(DatabaseField field) {
this.index = field.index;
this.name = field.getName();
this.table = field.getTable();
this.type = field.type;
this.useDelimiters = field.shouldUseDelimiters();
this.useUpperCaseForComparisons = field.getUseUpperCaseForComparisons();
this.nameForComparisons = field.getNameForComparisons();
this.typeName = field.getTypeName();
this.sqlTypeName = "";
}
public ObjectRelationalDatabaseField(String name) {
super(name);
this.sqlTypeName = "";
}
/*
* INTERNAL:
* Convert all the class-name-based settings in this mapping to actual
* class-based settings. This method is implemented by subclasses as
* necessary.
* @param classLoader
*/
@Override
public void convertClassNamesToClasses(ClassLoader classLoader) {
super.convertClassNamesToClasses(classLoader);
if (nestedTypeField != null) {
nestedTypeField.convertClassNamesToClasses(classLoader);
}
}
/**
* ADVANCED:
* For ARRAY and STRUCT fields, this is the user defined type for the field.
* For REF fields, this is the user defined type of entity is points to.
*/
public String getSqlTypeName() {
return sqlTypeName;
}
/**
* PUBLIC:
* Return if this is an ObjectRelationalDatabaseField.
*/
@Override
public boolean isObjectRelationalDatabaseField(){
return true;
}
/**
* ADVANCED:
* For ARRAY and STRUCT fields, this is the user defined type for the field.
* For REF fields, this is the user defined type of entity is points to.
*/
public void setSqlTypeName(String sqlTypeName) {
this.sqlTypeName = sqlTypeName;
}
/**
* ADVANCED:
* For ARRAY fields, this field's type represents the type contained in the ARRAY.
*/
public DatabaseField getNestedTypeField() {
return nestedTypeField;
}
/**
* ADVANCED:
* For ARRAY fields, this field's type represents the type contained in the ARRAY.
*/
public void setNestedTypeField(DatabaseField nestedTypeField) {
this.nestedTypeField = nestedTypeField;
}
}