Message:
  A new issue has been created in JIRA.
---------------------------------------------------------------------
View the issue:
  http://objectstyle.org/jira/secure/ViewIssue.jspa?key=CAY-96
Here is an overview of the issue:
---------------------------------------------------------------------
        Key: CAY-96
    Summary: synchronization erroneously saves NULL
       Type: Bug
     Status: Assigned
   Priority: Critical
    Project: Cayenne
 Components: 
             Cayenne Core Library
   Versions:
             1.1 [DEV]
   Assignee: Andrus Adamchik
   Reporter: Jim Menard
    Created: Thu, 12 Feb 2004 11:45 AM
    Updated: Thu, 12 Feb 2004 11:45 AM
Environment: Mac OS X, PostgreSQL, Cayenne 1.1a-pre2
Description:
I'm testing 1.1a-pre2, and I think I may have found a bug. I have in-JVM synchronization switched on ("type 2" synchronization, the default).
        Address -> AddressType -> Language
I create an address, load an address type, and assign the type to the address.  Note that I never loaded the language object explicitly. When I commit changes, (A) Cayenne attempts to re-save the address type, even though it has not changed. (B) It attempts to set the language_id to NULL when it does so.
INFO  [10:21:13,109] QueryLogger: UPDATE public.address_type SET language_id = ? WHERE id = ?
INFO  [10:21:13,111] QueryLogger: [bind: NULL, 2]
INFO  [10:21:13,122] QueryLogger: *** error.
java.sql.SQLException: ERROR:  ExecUpdate: Fail to add null value in not null attribute language_id
Here's some code that may trigger the bug. If it doesn't, I can give you the complete code. (I'm very sorry, but I have backed out of 1.1a-pre2 and do not have time right now to re-install it and create a minimal test case.)
    Address billAddress =
        (Address)context.createAndRegisterNewObject("Address");
    // set other of address
    billAddress.setAddressType(AddressType.findNamed(AddressType.BILLING,
                                                     context));
// AddressType.findNamed does this:
//    SelectQuery query =
//        new SelectQuery(AddressType.class,
//                        ExpressionFactory.matchExp("type", name));
//
//    List list = context.performQuery(query);
//    return list.size() > 0 ? (AddressType)list.get(0) : null;
    account.setBillingAddress(billAddress);
    member.setBillAccount(account);
    context.commitChanges();
When committing, Cayenne tries to re-save the address type object and sets the language id to NULL.
I will attach the Cayenne XML files.
---------------------------------------------------------------------
JIRA INFORMATION:
This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
   http://objectstyle.org/jira/secure/Administrators.jspa
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira
This archive was generated by hypermail 2.0.0 : Thu Feb 12 2004 - 11:46:45 EST