Hi Nikita,

Based on what you said below, I rebuilt my Database Schema from scratch but now I'm getting the error below.  The validation is failing the line 34

 ClientBaseAdmin.getObjectContext().commitChanges();

because of the line 418

cl.setCommunicationType(CommunicationType.find("Email"));

To me it looks like the commit can't happen in the child record because the commit from the parent record is incomplete and no record is created at all.

Andrew


Caused by: org.apache.cayenne.validation.ValidationException: [v.4.0.B1 Jun 02 2017 15:11:18] Validation failures: Validation failure for com.callistacti.clientbase.Database.CommunicationLog.communicationType: "communicationType"  is required. Validation failure for com.callistacti.clientbase.Database.CommunicationLog.communicationType: "communicationType"  is required.     at org.apache.cayenne.access.ObjectStoreGraphDiff.validateAndCheckNoop(ObjectStoreGraphDiff.java:113)     at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:734)     at org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:691)     at com.callistacti.clientbase.Database.CommunicationType.find(CommunicationType.java:34)     at com.callistacti.clientbase.Panel.PanelGroups.windowClose(PanelGroups.java:418)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)


On 18/09/17 11:40 AM, Nikita Timofeev wrote:
Hi Andrew,

Can you provide stack trace for the exception you got (Cayenne related
part of it)?
It seems to me that you have problem with PK generation, not with your
data objects.
Your code looks fine to me and should work.

On Mon, Sep 18, 2017 at 6:30 PM, Andrew Willerding
<[email protected]> wrote:
Hi,

I am trying to create a DB record where a dependency record may not yet
exist and I'm getting a "No rows for ..." error.  I don't understand how I
should create the child record that will be used for the parent object so it
can be referenced by the parent object without getting an error.  The idea
is to dynamically create a child record as needed.

Thanks,

Andrew

Example code:

ObjectContext oc = ClientBaseAdmin.getObjectContext();
CommunicationLog cl = oc.newObject(CommunicationLog.class);
cl.setCommunicationDT(LocalDateTime.now());
cl.setCommunicationType(CommunicationType.find("Email"));
oc.commitChanges();

and in CommunicationType I have

public static CommunicationType find(String value) {
         CommunicationType result = null;
         result = ObjectSelect.query(CommunicationType.class)
                 .where(CommunicationType.DESCRIPTION.eq(value))
                 .selectFirst(ClientBaseAdmin.getObjectContext());

         if (result == null) {
             CommunicationType ct =
ClientBaseAdmin.getObjectContext().newObject(CommunicationType.class);
             ct.setDescription(value);
             ClientBaseAdmin.getObjectContext().commitChanges();
             result = ct;
         }
         return result;
}




Reply via email to