Я несколько раз прочитал ваш пример и не понимаю, о чем вы.В коде нет никаких изменений или фиксаций, а также указаний на то, что ожидается, а что нет.Если бы этот код был в типичной системе, использующей ORM, такой как hibernate, я бы не увидел никаких проблем с ним.
Если предположить, что a
не было зафиксировано в базе данных, то dao.findBar(a)
все равно вернет его, потому что он будет в кеше гибернатов.Предполагая, что он был связан с сеансом гибернации в первую очередь.
dao.findBar(a)
должен вернуть x
, при условии, что он соответствует тем же критериям, что и a
.то есть, что он уже существует или был связан с сеансом гибернации.
Таким образом, поэтому dao.findBar(x.getBaz())
также должен работать, предполагая то же самое.
Как вы можете видеть, в приведенных выше утверждениях много "предположительно".Я сомневаюсь, что вы получите лучший ответ без более ясного вопроса.
Еще одно осложнение состоит в том, что в вашем вопросе не упоминаются ORM, но вы говорите о них в комментариях.Поэтому мой комментарий предполагает такую ситуацию.Если вы не используете ORM и ваш дао обращается к базе данных напрямую через JDBC, то ответы снова будут совершенно другими - в зависимости от внутреннего кодирования дао.