JPA 2, API design, дайте глобус

4.10 Bulk Update and Delete Operations (...) A delete operation only applies to entities of the specified class and its subclasses. It does not cascade to related entities. (...)
И знаете чего? Ребята, которые рисуют всяческие ORM и всегда с прибором клали на спеки, внезапно прониклись, прочистили залипшие чакры и сделали, как просили. То есть, если вы фигачите нечто вида "delete from Message m where m.id in (?)" и Message содержит ассоциации, то вы получите исключение внешнего ключа. Потому что, по логике дизигнеров API, вы должны соорудить нечто навроде (краткий вариант кода)
List list = messageDao.getListForId... for(Message msg: list) { messageDao.delete(msg); }
Если врубить трассировку (ха-ха, не все ORM, к слову, готовы делить своими sql), то вы обнаружите отдельный запрос на удаление на каждую ассоциацию к каждой мессаге. Меж тем в SchemeMedaData вполне верная DDL существует и ничто не мешает сделать по-человечески.
Чем дальше я гляжу в код "hiload, modern designed web application" тем сильнее убеждаюсь, что некоторые серебряные пули уверенно кладут только девелоперов.
|
</> |