How to maintain referential integrity of an object graph when a node is deleted
Suggestions:


Disallow deletion of a product that has been ordered.
Move the order detail row to an archive table that has no foreign key to products (perhaps denormalized to store product name etc that would otherwise be lost) then delete the product.
Move the product to an archive table and the order detail to another archive table with a foreign key reference to the product archive table.