Seems like a pointless annotation; vaguely equivalent to the reverse of the relationship being ON DELETE CASCADE.
-----Original Message----- From: Mike Kienenberger [mailto:[EMAIL PROTECTED] Sent: Mon 5/12/2008 7:16 PM To: [email protected] Subject: Re: one-to-many problem Yeah, in retrospect it won't work because command.name isn't a pk. http://cayenne.apache.org/doc12/to-dep-pk-checkbox.html should explain it fairly well. On 5/12/08, Scott Anderson <[EMAIL PROTECTED]> wrote: > Can't check the box. Can you explain what that does? I read the > documentation for it about 100 times and I still can't make heads or > tails of it. > > > -----Original Message----- > From: Mike Kienenberger [mailto:[EMAIL PROTECTED] > Sent: Monday, May 12, 2008 6:57 PM > To: [email protected] > Subject: Re: one-to-many problem > > One thing you could try is to make command.name -> command_alias.name > to-dependent-key=true if it's not already set that way. Don't know if > it'll help, though. > > > On 5/12/08, Scott Anderson <[EMAIL PROTECTED]> wrote: > > I've got a table `command which has: > > `id` int PK > > `name` varchar(32) UNIQUE > > > > and a table `command_alias` which has > > `alias` varchar(32) PK > > `name` varchar(32) FK REF `command`.`name` > > > > Take special note how `command_alias`.`name` is a FK to > `command`.`name` > > (unique field) and not `command`.`id` (the PK) > > > > The following code chokes: > > public static CommandAlias create(Command command, String > alias) > > { > > CommandAlias ca = > > DatabaseContext.getContext().newObject(CommandAlias.class); > > ca.setAlias(alias); > > ca.setToCommand(command); > > command.addToAliases(ca); > > try { > > ca.updateRow(); > > return ca; > > } catch(Exception e) { > > Out.exception(e); > > return null; > > } > > } > > > > With the error: > > > > May 12, 2008 6:15:55 PM org.apache.cayenne.access.QueryLogger > logQuery > > INFO: INSERT INTO command_alias (alias, name) VALUES (?, ?) > > INFO: [batch bind: 1->alias:'aa', 2->name:NULL] > > May 12, 2008 6:15:55 PM org.apache.cayenne.access.QueryLogger > > logQueryError > > INFO: *** error. > > java.sql.SQLIntegrityConstraintViolationException: Column 'NAME' > cannot > > accept a NULL value. > > > > > > I am 100% sure that I am not sending a null Command object. I believe > > this stems from the fact that the relationship is not a FK-PK > > relationship, but a FK-UNIQUE relationship, as evidenced by the fact > > that if I make the `command_alias`.`name` field visible in the code, > and > > set do ca.setName(command.getName()) then this error does not occur. > > > > I am using a 3.0 snapshot from March. > > > > > > And here's the relevant sections of my mapping file (I removed some > > unrelated fields from command): > > > > <db-entity name="command"> > > <db-attribute name="id" type="INTEGER" > > isPrimaryKey="true" isGenerated="true" isMandatory="true" > length="11"/> > > <db-attribute name="name" type="VARCHAR" > > isMandatory="true" length="32"/> > > </db-entity> > > <db-entity name="command_alias"> > > <db-attribute name="alias" type="VARCHAR" > > isPrimaryKey="true" isMandatory="true" length="32"/> > > <db-attribute name="name" type="VARCHAR" length="32"/> > > </db-entity> > > <obj-entity name="Command" className="net.bnubot.db.Command" > > dbEntityName="command" > superClassName="net.bnubot.db.CustomDataObject"> > > <obj-attribute name="name" type="java.lang.String" > > db-attribute-path="name"/> > > </obj-entity> > > <obj-entity name="CommandAlias" > > className="net.bnubot.db.CommandAlias" dbEntityName="command_alias" > > superClassName="net.bnubot.db.CustomDataObject"> > > <obj-attribute name="alias" type="java.lang.String" > > db-attribute-path="alias"/> > > </obj-entity> > > <db-relationship name="commandAliasArray" source="command" > > target="command_alias" toMany="true"> > > <db-attribute-pair source="name" target="name"/> > > </db-relationship> > > <db-relationship name="toCommand" source="command_alias" > > target="command" toMany="false"> > > <db-attribute-pair source="name" target="name"/> > > </db-relationship> > > <obj-relationship name="aliases" source="Command" > > target="CommandAlias" deleteRule="Deny" > > db-relationship-path="commandAliasArray"/> > > <obj-relationship name="toCommand" source="CommandAlias" > > target="Command" db-relationship-path="toCommand"/> > > >
