В моем приложении я подключен к веб-сокету.
Сокет отправляет данные JSON. Когда оно становится доступным, я обрабатываю его на другой работе В каждой работе я конвертирую JSON в модельный объект с помощью GSON. Существует 3 типа моделей, все независимые и с одним общим полем отметки времени в MappedSuperclass. У них нет явного поля id. Я вызываю save для модели и в 1 из 1000 раз выдается «PersistentObjectException: отдельная сущность, переданная для сохранения».
Несколько заданий вызываются из запускаемого задания, которое подключается к веб-сокету. Библиотека, которую я использую, создает отдельную ветку для каждого входящего сообщения. Затем я преобразую поток в задание перед сохранением в базу данных. Я делаю это, потому что в противном случае выдается еще одно исключение PersistentObjectException при изменении идентификатора с 1 на 2 или что-то подобное, если я разрешу исходному потоку вызвать save.
У меня также запущено другое задание, которое одновременно обращается к базе данных. Что может быть не так?
@Override
public void onMessage(final WebSocketMessage message){
new Job() {
@Override
public void doJob() {
processMessage(message.getText());
}
}.now();
}
public void processMessage(String message) {
Appointment appointment = new Gson().fromJson(message, Appointment.class);
appointment.save();
}
@Entity
public class Appointment extends CalendarEvent {
private String owner;
}
@MappedSuperclass
public abstract class CalendarEvent extends Model {
private long timestamp;
}
РЕДАКТИРОВАТЬ: Добавлен пример кода