Unless you apply database foreign key constraints extensively, it is
possible to end up with orphaned keys in your database. For example,
suppose Magazine
m
has a
reference to Article
a
. If you
delete a
without nulling m
's
reference, m
's database record will wind up with
an orphaned key to the non-existent a
record.
Note | |
---|---|
One way of avoiding orphaned keys is to use dependent fields. |
Kodo's
kodo.OrphanedKeyAction
configuration property controls
what action to take when Kodo encounters an orphaned key. You can set
this plugin string (see Section 2.5, “Plugin Configuration”) to
a custom implementation of the
kodo.event.OrphanedKeyAction
interface, or use
one of the built-in options:
log
: This is the default setting.
This option logs a message for each orphaned key.
It is an alias for the
kodo.event.LogOrphanedKeyAction
class, which has the following additional properties:
Channel
: The channel to log to.
Defaults to kodo.Runtime
.
Level
: The level to log at.
Defaults to WARN
.
exception
: Throw an exception
when Kodo discovers an orphaned key. This is an alias for the
kodo.event.ExceptionOrphanedKeyAction
class.
In JPA, the exception type will be
javax.persistence.EntityNotFoundException
.
In JDO, the exception type will be
javax.jdo.JDOObjectNotFoundException
.
none
: Ignore orphaned keys.
This is an alias for the
kodo.event.NoneOrphanedKeyAction
class.