здесь я снова в своем проекте самообучения и личного эксперимента, чтобы получить больше понимания.
Вот описание моей среды:
У меня есть супер модель сущности, что все мои модели наследуют от .it имеет только свойство id
я использую шаблон genericDAO, найденный на веб-сайте hibernate.
Теперь моя проблема заключается в том, что я использую список вместо набора для сопоставления «один ко многим» (здесь нет необходимости избегать дублирования), и когда я ссылаюсь на идентификатор супер сущности в свойстве list index или list-index, у меня возникает эта ошибка:
org.hibernate.NonUniqueObjectException: другой объект с тем же значением идентификатора уже был связан с сеансом
вот интерфейс супер сущности
public interface Model extends Serializable {
public Long getId();
public void setId(Long id);
}
//here is its implementation.they are not in the same physical file
public abstract class ModelImpl implements Model {
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
вот файл сопоставления
<class abstract="true" name="ModelImpl">
<!--i removed doctype and stuffs-->
<id name="id">
<generator class="assigned"/>
</id>
</class>
вот на интерфейсе pojo это мой родитель
public interface Message extends Model {
Date getDateSent();
String getGlobalStatus();
}
// его реализация здесь, но в другом физическом файле
открытый класс MessageImpl расширяет ModelImpl реализует сообщение {
приватная строка globalStatus;
закрытый ответ в ответе = новый ArrayList ();
приватная дата dateSent;
// сеттеры и геттеры ....
}
его файл сопоставления выглядит так:
<union-subclass extends="ModelImpl" name="MessageImpl">
<property name="globalStatus"/>
<property name="dateSent" type="timestamp"/>
->
я прокомментировал набор, потому что ему дали ошибку приведения, которая заставляет меня понять мою ошибку
поэтому класс Response, являющийся родительским, находится здесь:
public interface Response extends Model {
String getGatewayMessageId();
Message getMessageId();
}
//its implementation but in different physical file
public class ResponseImpl extends ModelImpl implements Response{
private static final long serialVersionUID = 1L;
private Message messageId;
private String gatewayMessageId;
//setters and getters..
}
так что это в основном то. Теперь во время моего теста, когда я пытаюсь сохранить сообщение с его потомками, оно выдает следующее:
org.hibernate.NonUniqueObjectException: другой объект с тем же значением идентификатора уже был связан с сеансом
Я могу использовать все методы, связанные с сохранением данных, кроме того, о котором я только что говорил.
я немного растерялся, потому что все они наследуют идентификатор модели, так что я делаю не так?
спасибо за чтение. Я не совсем понимаю проблему здесь.