Hi Christian,

In JDO 1, we allowed the implementation to decide how to store fields of type Object and interfaces. Most compliant implementations simply serialized the instances. Job done. But in JDO 2, there is more explicit control over the mapping, and not all mappings can be used portably with Object and interfaces.

The issue is that, in general, mapping an instance of type Object to a fixed-schema datastore (e.g. RDBMS) is not a solved problem. We have introduced a few explicit mapping types in JDO 2 that allow more control by the deployer over how persistent instances are represented in the datastore, and not all of these explicit mapping types can be reasonably implemented for the target datastores.

We have added metadata to say that instances should be mapped:

serialized-element: the instance is stored serialized in a column of the join table

embedded-element: the instance is stored field-by-field in the join table

"neither of the above": the instance is stored in its own table and a reference is stored in the join table

It's straightforward to map serialized-element for Object and SimpleInterface. Just serialize the instance and store the stream in the blob column.

For embedded-element, the structure of what you're storing needs to be known. For Object, there is no structure unless you scan the entire known universe of persistence-capable classes and use a column for each persistent field. But this has no practical value.

For neither serialized nor embedded, the referenced type needs to be known in order to have a column that refers to the target table. Without knowing the target type, you would have to declare a column referring to each primary key column of any persistence-capable class, and store the corresponding key value in the appropriate column. Again, I don't know of any practical use-case.

We have a similar issue with fields of type Object and interface. I'm proposing a new metadata attribute (Issue 139) for field in order to allow the deployer to specify a more specific field type, so that deployment to RDBMS specifying non-serialized storage is possible.

Regards,

Craig

On Nov 9, 2005, at 3:39 AM, Christian Ernst wrote:

Hy !
I have a question related to the Metadata changes done in 330689 for the PC Classes used for Collection Field tests. Why have the variants for Collection fields with element- type=java.lang.Object or element-type=SimpleInterface been changed to element-type=SimpleClass ( concrete PC class ) in the Metadata ?

mfg
Christian




Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:[EMAIL PROTECTED]
P.S. A good JDO? O, Gasp!

Reply via email to