I was thinking in CDO's writeProperty() we could test if a date or array and clone them if true. Otherwise, just advertise that we don't clone mutable values as a limitation of the framework. I suspect for most use cases this is a reasonable limitation.
On Mon, Sep 8, 2014 at 10:20 AM, John Huss <johnth...@gmail.com> wrote: > The answer is to use immutable data types. Unfortunately that takes some > work in Java. Anyway, it's not that difficult to write a Cayenne > ExtendedType subclass to allow using custom attribute types that are > immutable, if you can find or create an immutable data type that fits your > needs. For byte[] you could use ImmutableList in guava: > > > http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableList.html > > > > On Mon, Sep 8, 2014 at 7:54 AM, Michael Gentry <mgen...@masslight.net> > wrote: > > > I think everyone is getting wrapped up around Dates. My general question > > was about mutable types. > > > > byte[] data = { 1, 2, 3, 4 }; > > person.setData(data); > > data[0] = 5; > > for (int i = 0; i < person.getData().length; i++) > > System.out.println("Data[" + i + "] = " + person.getData()[i]); > > > > Data[0] = 5 > > > > Data[1] = 2 > > > > Data[2] = 3 > > > > Data[3] = 4 > > > > Again, modifying the original value changes what is stored internally by > > Cayenne. > > > > Thanks, > > > > mrg > > > > > > On Mon, Sep 8, 2014 at 3:39 AM, Aristedes Maniatis <a...@maniatis.org> > > wrote: > > > > > And https://github.com/ThreeTen/threetenbp for Java 6/7 users. > > > > > > Ari > > > > > > > > > On 8/09/2014 4:42pm, Andrus Adamchik wrote: > > > > Also Java 8 Date and Time if Java 8 is an option: > > > > > > > > > > > > > > http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html > > > > > > > > Andrus > > > > > > > > On Sep 8, 2014, at 4:17 AM, John Huss <johnth...@gmail.com> wrote: > > > > > > > >> Sure, use Joda time. > > > >> On Sep 6, 2014 8:15 PM, "Michael Gentry" <mgen...@masslight.net> > > wrote: > > > >> > > > >>> Is that a realistic option? > > > >>> > > > >>> > > > >>> On Sat, Sep 6, 2014 at 6:55 PM, John Huss <johnth...@gmail.com> > > wrote: > > > >>> > > > >>>> My thoughts are: don't use Date. > > > >>>> On Sep 6, 2014 4:58 PM, "Michael Gentry" <mgen...@masslight.net> > > > wrote: > > > >>>> > > > >>>>> Should Cayenne copy/clone mutable objects, such as Date? > > > >>>>> > > > >>>>> For example, if I modify a date after setting it in a Cayenne > > object > > > >>>>> (person), it modifies the value stored by Cayenne: > > > >>>>> > > > >>>>> SimpleDateFormat timeFormat = new SimpleDateFormat > ("yyyy-MM-dd"); > > > >>>>> Date d1 = timeFormat.parse("2014-02-01"); > > > >>>>> person.setStartDate(d1); > > > >>>>> d1.setYear(2013 - 1900); // Date hackery > > > >>>>> System.out.println("Start Date = " + person.getStartDate()); > > > >>>>> > > > >>>>> This outputs: > > > >>>>> > > > >>>>> Start Date = Fri Feb 01 00:00:00 EST 2013 > > > >>>>> > > > >>>>> I've never actually experienced an issue with Cayenne not > copying a > > > >>>>> Date/etc, but was wondering your thoughts on this. > > > >>>>> > > > >>>>> Thanks, > > > >>>>> > > > >>>>> mrg > > > >>>>> > > > >>>> > > > >>> > > > > > > > > > > -- > > > --------------------------> > > > Aristedes Maniatis > > > GPG fingerprint CBFB 84B4 738D 4E87 5E5C 5EFA EF6A 7D2E 3E49 102A > > > > > >