Объект, вероятно, не одинаков для двух потоков. Предположим, что ваши потоки используют фабрику сеансов для доступа к БД, объекты, которые вы получаете из сеанса, должны рассматриваться как «независимые» (я считаю, что hibernate создает «свежие» объекты для каждого get (), если они не находятся в сеансе).
Что касается вопроса о звездах, то же самое происходит, когда два человека выбирают одну и ту же строку из БД, свойства ACID БД гарантируют, что каждая операция является атомарной, поэтому, если вы удалите звезду из ниндзя в потоке t1 и commit , поток t2 будет считывать зафиксированные значения t1.
В качестве альтернативы, вы можете попросить hibernate заблокировать строку соответствующего ниндзя в T1, так что даже если T2 запрашивает строку, ему придется ждать, пока T1 не завершит фиксацию или остановится.