У меня есть простая модель домена следующим образом
Драйвер - ключ (строка), количество запусков, количество уникальных треков
Трек - ключ (строка), количество прогонов, количество уникальных водителей, лучшее время
Выполнить - ключ(?), ключ-драйвер, ключ-трек, время, логическое-обновление-драйвера, логическое-обновление-трека
Мне нужно иметь возможность обновлять Run и Driver в одной и той же транзакции; а также Run и Track в одной и той же транзакции (очевидно, чтобы убедиться, что я не обновляю статистику дважды или не пропускаю счетчик приращений)
Теперь я попытался назначить в качестве ключа запуска ключ, состоящий из ключа водителя / ключа дорожки / ключа запуска (строка)
Это позволит мне обновить за одну транзакцию сущность Run и сущность Driver.
Но если я попытаюсь обновить объекты Run и Track вместе, он будет жаловаться, что не может выполнить транзакцию в нескольких группах. В нем говорится, что в транзакции есть и водитель, и грузовик, и он не может работать с обоими...
tx.begin(); run = pmf.getObjectById(Run.class, runKey); track = pmf.getObjectById(Track.class, trackKey); //This is where it fails; incrementCounters(); updateUpdatedFlags(); tx.commit();
Как ни странно, когда я делаю то же самое для обновления Run and Driver, все работает нормально.
Любые предложения о том, как еще я могу сопоставить свою модель предметной области для достижения той же функциональности?