Не устанавливайте id на 0, прежде чем сохранить его. Оставьте это как ноль. Если значение установлено, Hibernate будет считать, что объект уже находится в базе данных, и попытаться обновить его.
И вы, вероятно, получили несколько объектов с одинаковым идентификатором (0).
Обновление
Пока я думаю об этом, вы, вероятно, вынуждены установить id на какое-то значение, потому что у вас нет генератора id, и Hibernate ожидает, что вы предоставите значение для id. Однако в Hibernate нет ничего, что могло бы обновить идентификаторы на ваших объектах после вставки. Таким образом, вы получите несколько объектов в сеансе с идентификатором 0.
Я не уверен, что было бы хорошим решением для этой ситуации. Скорее всего вам нужно будет написать собственный генератор идентификаторов. Но в случае последовательностей, например, это требует дополнительного вызова базы данных. Может быть, вы должны рассмотреть вопрос о назначении идентификатора, кроме триггера?