db4o does not have a built-in referential integrity checking mechanism. Luckily EventRegistry gives you access to all the necessary events to implement it. You will just need to trigger validation on create, update or delete and cancel the action if the integrity is going to be broken.
For example, if Car object is referencing Pilot and the referenced object should exist, this can be ensured with the following handler in deleting() event:
final EventRegistry events = EventRegistryFactory.forObjectContainer(container); events.deleting().addListener(new EventListener4<CancellableObjectEventArgs>() { @Override public void onEvent(Event4<CancellableObjectEventArgs> events, CancellableObjectEventArgs eventArgs) { final Object toDelete = eventArgs.object(); if(toDelete instanceof Pilot){ final ObjectContainer container = eventArgs.objectContainer(); final ObjectSet<Car> cars = container.query(new Predicate<Car>() { @Override public boolean match(Car car) { return car.getPilot() == toDelete; } }); if(cars.size()>0){ eventArgs.cancel(); } } } });
You can also add handlers for creating() and updating() events for a Car object to make sure that the pilot field is not null.
Note, that in client/server mode deleting event is only raised on the server side, therefore the code above can't be used and will throw an exception.