|
As we saw in the Types Guide DataNucleus supports the persistence
of a large range of Java field types. With RDBMS datastores, we have the notion of tables/columns in
the datastore and so each Java type is mapped across to a column or a set of columns in a table. It
is important to understand this mapping when mapping to an existing schema for example. In RDBMS
datastores a java type is stored using JDBC types. DataNucleus supports the use of the vast majority of the
available JDBC types.
When persisting a Java type in general it is persisted into a single column. For example a
String will be persisted into a VARCHAR column by default. Some types (e.g Color) have more
information to store than we can conveniently persist into a single column and so use multiple
columns. Other types (e.g Collection) store their information in other ways, such as
foreign keys.
This table shows the Java types we saw earlier and whether they can be queried using JDOQL queries,
and what JDBC types can be used to store them in your RDBMS datastore. Not all RDBMS datastores
support all of these options. While DataNucleus always tries to provide a complete list sometimes
this is impossible due to limitations in the underlying JDBC driver
|
Java Type
|
Number
Columns
|
Queryable
|
JDBC Type(s)
|
|
boolean
|
1
|
|
BIT
, CHAR ('Y','N'), BOOLEAN, TINYINT, SMALLINT, NUMERIC
|
|
byte
|
1
|
|
TINYINT
, SMALLINT, NUMERIC
|
|
char
|
1
|
|
CHAR
, INTEGER, NUMERIC
|
|
double
|
1
|
|
DOUBLE
, DECIMAL, FLOAT
|
|
float
|
1
|
|
FLOAT
, REAL, DOUBLE, DECIMAL
|
|
int
|
1
|
|
INTEGER
, BIGINT, NUMERIC
|
|
long
|
1
|
|
BIGINT
, NUMERIC, DOUBLE, DECIMAL, INTEGER
|
|
short
|
1
|
|
SMALLINT
, INTEGER, NUMERIC
|
|
boolean[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
byte[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
char[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
double[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
float[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
int[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
long[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
short[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
java.lang.Boolean
|
1
|
|
BIT
, CHAR('Y','N'), BOOLEAN, TINYINT, SMALLINT
|
|
java.lang.Byte
|
1
|
|
TINYINT
, SMALLINT, NUMERIC
|
|
java.lang.Character
|
1
|
|
CHAR
, INTEGER, NUMERIC
|
|
java.lang.Double
|
1
|
|
DOUBLE
, DECIMAL, FLOAT
|
|
java.lang.Float
|
1
|
|
FLOAT
, REAL, DOUBLE, DECIMAL
|
|
java.lang.Integer
|
1
|
|
INTEGER
, BIGINT, NUMERIC
|
|
java.lang.Long
|
1
|
|
BIGINT
, NUMERIC, DOUBLE, DECIMAL, INTEGER
|
|
java.lang.Short
|
1
|
|
SMALLINT
, INTEGER, NUMERIC
|
|
java.lang.Boolean[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
java.lang.Byte[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
java.lang.Character[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
java.lang.Double[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
java.lang.Float[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
java.lang.Integer[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
java.lang.Long[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
java.lang.Short[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
java.lang.Number
|
1
|
|
|
|
java.lang.Object
|
1
|
|
LONGVARBINARY, BLOB
|
|
java.lang.String [9]
|
1
|
|
VARCHAR
, CHAR, LONGVARCHAR, CLOB, BLOB, DATALINK [7], UNIQUEIDENTIFIER [8], XMLTYPE [10]
|
|
java.lang.StringBuffer [9]
|
1
|
|
VARCHAR
, CHAR, LONGVARCHAR, CLOB, BLOB, DATALINK [7], UNIQUEIDENTIFIER [8], XMLTYPE [10]
|
|
java.lang.String[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
java.math.BigDecimal
|
1
|
|
DECIMAL
, NUMERIC
|
|
java.math.BigInteger
|
1
|
|
NUMERIC
, DECIMAL
|
|
java.math.BigDecimal[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
java.math.BigInteger[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
java.sql.Date
|
1
|
|
DATE
, TIMESTAMP
|
|
java.sql.Time
|
1
|
|
TIME
, TIMESTAMP
|
|
java.sql.Timestamp
|
1
|
|
TIMESTAMP
|
|
java.util.ArrayList
|
0
|
|
|
|
java.util.BitSet
|
0
|
|
LONGVARBINARY, BLOB
|
|
java.util.Calendar [3]
|
1 or 2
|
|
INTEGER, VARCHAR, CHAR
|
|
java.util.Collection
|
0
|
|
|
|
java.util.Currency
|
1
|
|
VARCHAR
, CHAR
|
|
java.util.Date
|
1
|
|
TIMESTAMP
, DATE, CHAR, BIGINT
|
|
java.util.Date[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
java.util.GregorianCalendar [2]
|
1 or 2
|
|
INTEGER, VARCHAR, CHAR
|
|
java.util.HashMap
|
0
|
|
|
|
java.util.HashSet
|
0
|
|
|
|
java.util.Hashtable
|
0
|
|
|
|
java.util.LinkedHashMap
|
0
|
|
|
|
java.util.LinkedHashSet
|
0
|
|
|
|
java.util.LinkedList
|
0
|
|
|
|
java.util.List
|
0
|
|
|
|
java.util.Locale [9]
|
1
|
|
VARCHAR
, CHAR, LONGVARCHAR, CLOB, BLOB, DATALINK [7], UNIQUEIDENTIFIER [8], XMLTYPE [10]
|
|
java.util.Locale[]
|
1
|
[6]
|
LONGVARBINARY, BLOB
|
|
java.util.Map
|
0
|
|
|
|
java.util.Properties
|
0
|
|
|
|
java.util.PriorityQueue
|
0
|
|
|
|
java.util.Queue
|
0
|
|
|
|
java.util.Set
|
0
|
|
|
|
java.util.SortedMap
|
0
|
|
|
|
java.util.SortedSet
|
0
|
|
|
|
java.util.Stack
|
0
|
|
|
|
java.util.TimeZone [9]
|
1
|
|
VARCHAR
, CHAR, LONGVARCHAR, CLOB, BLOB, DATALINK [7], UNIQUEIDENTIFIER [8], XMLTYPE [10]
|
|
java.util.TreeMap
|
0
|
|
|
|
java.util.TreeSet
|
0
|
|
|
|
java.util.UUID [9]
|
1
|
|
VARCHAR
, CHAR, LONGVARCHAR, CLOB, BLOB, DATALINK [7], UNIQUEIDENTIFIER [8], XMLTYPE [10]
|
|
java.util.Vector
|
0
|
|
|
|
java.awt.Color [1]
|
4
|
|
INTEGER
|
|
java.awt.Point [2]
|
2
|
|
INTEGER
|
|
java.awt.image.BufferedImage [5]
|
1
|
|
LONGVARBINARY, BLOB
|
|
java.net.URI [9]
|
1
|
|
VARCHAR
, CHAR, LONGVARCHAR, CLOB, BLOB, DATALINK [7], UNIQUEIDENTIFIER [8], XMLTYPE [10]
|
|
java.net.URL [9]
|
1
|
|
VARCHAR
, CHAR, LONGVARCHAR, CLOB, BLOB, DATALINK [7], UNIQUEIDENTIFIER [8], XMLTYPE [10]
|
|
java.io.Serializable
|
1
|
|
LONGVARBINARY, BLOB
|
|
javax.jdo.spi.PersistenceCapable
|
1
|
|
[embedded]
|
|
javax.jdo.spi.PersistenceCapable[]
|
1
|
[6]
|
|
|
java.lang.Enum [4]
|
1
|
|
LONGVARBINARY, BLOB, VARCHAR, INTEGER
|
-
[1]
-
java.awt.Color
- stored in 4 columns (red, green, blue, alpha).
ColorSpace is not persisted.
-
[2]
-
java.awt.Point
- stored in 2 columns (x and y).
-
[3]
-
java.util.Calendar
- stored in 2 columns (milliseconds and timezone).
-
[4]
-
java.lang.Enum
- by default, serialized into one column.
Storing in VARCHAR or INTEGER data types is available via the "Java5" plugin. Queryable if
stored in VARCHAR or INTEGER columns.
-
[5]
-
java.awt.image.BufferedImage
is stored using JPG image format
-
[6]
- Array types are queryable if not serialised, but stored to many rows
-
[7]
- DATALINK JDBC type supported on DB2 only. Uses the SQL function
DLURLCOMPLETEONLY to fetch from the datastore. You can override this using the
select-function extension. See the
JDO MetaData reference.
-
[8]
- UNIQUEIDENTIFIER JDBC type supported on MSSQL only.
-
[9]
- Oracle treats an empty string as the same as NULL. To workaround this limitation
DataNucleus replaces the empty string with the character \u0001.
-
[10]
- XMLTYPE JDBC type supported on Oracle only, and is included in the
"datanucleus-xmltypeoracle" plugin.
If you need to extend the provided DataNucleus capabilities in terms of its datastore types support
you can utilise a plugin point.
|
|