About ValueObjectType and Extended types and Collection based objects

Riccardo De Menna <[email protected]> Mon, 24 Oct 2022 08:41:36 +0200
Newsgroups gmane.comp.java.cayenne.user
Message-ID <[email protected]>
Hi all,

I’m new to Cayenne and coming from the WebObjects world I’m trying to figure out how to adjust to the different environment. I was looking for some simple advice on how to do conversions for custom types.

In particular, how would I go to save a collection based object. Let’s say I have a List<LocalDateTime> and my database is holding data as a string of pipe separated longs representing the epoch millis. In webobjects I would be able to individually map that single column to factory methods and convert them. In cayenne I see I’m supposed to use ValueObjectType (or extended types) but I encountered two issues:

Issue 1:
If I want to use List<LocalDateTime> as my value type I can’t return the generic part with getValueType(). And eliminating the generics would make it a useless raw type because it would then clash with any other list based conversion (i.e. List<String>, List<Duration> bla bla) that requires a different encoding/decoding mechanism.
One thing that came to mind would be to attempt using a LocalDateTime[].class and then having to converted to a List<LocalDateTime> elsewhere. Is this the only way to go? 

Issue 2:
What if my database has different columns holding the same data type but serialized in different ways? I was checking some very old code of mine that I was trying to port and I found that in one cases I had serialized a list of strings as pipe separated and then somewhere else another list of strings as comma separated. How would one go to define different deserialization schemes for the same List<String> object. One based on a specific column of the database?

Thank you in advance for any support,
Riccardo De Menna