Hibernate Entity не сохраняется - PullRequest
1 голос
/ 30 ноября 2011

Я создаю веб-приложение на основе Spring MVC и Hibernate.У меня есть существующая модель домена, и приложение в основном работает.

У меня есть объект домена с именем Status и соответствующий класс Spring Service, содержащий стандартные методы CRUD, которые вы ожидаете (createStatus(Status s); и т. Д.).Метод сохранения нового статуса в настоящее время работает нормально и выглядит следующим образом:

@Transactional
    public void createStatus(Status s) {
        statusDao.persist(s);
    }

Все хорошо и работает нормально.Затем я добавил новый объект Domain с именем Notification, и у него возникли проблемы с сохранением объекта в БД (ничего не сохранялось и ошибок не регистрировалось) - поэтому для проверки я временно попытался создать фиктивный объект Notification и сохранить его внутри createStatus.() (я знаю, что это уродливо - но смысл был в том, чтобы попытаться сохранить его где-то, я знаю, что транзакции работают, а другие объекты сохраняются - это исключает проблемы транзакций).

Обновленный метод createвыглядит следующим образом:

@Transactional
public void createStatus(Status s) {
    statusDao.persist(s);
    Notification n = new Notification();
    getEntityManager().persist(n);

}

Теперь, когда я его запускаю, Состояние все еще сохраняется, но объект Уведомления не сохраняется, и в журнале нет ошибок.

Кто-нибудь испытываланалогичные проблемы, когда определенные сущности не сохраняются?


ОБНОВЛЕНИЕ:

Ниже приведены сущности (статус и уведомления) - они управляются аннотациями, поэтому файлы hbm отсутствуют:

Статус:

@Entity
@Table(name = "BF_STATUS")
@DiscriminatorValue("Status")
public class Status extends PersistableObject {

    private static final long serialVersionUID = 4925606208793500282L;


    @Column(name = "TITLE")
    protected String title;

    @Column(name = "DEADLINE")
    private Date deadline;

    @Column(name = "DETAILS")
    @Lob
    protected String details;

...
Accesors/Mutators
}

Уведомление:

@Entity
@Table(name = "BF_NOTIFICATION")
@DiscriminatorValue("notification")
public class Notification extends PersistableObject {

    private static final long serialVersionUID = -8935712447903901463L;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "LINKED_ACTIVITY", nullable = true)
    private Activity activity;

    @Column(name = "notificationRead")
    private boolean read = false;

    ...
    Accessors/Mutators

}

1 Ответ

1 голос
/ 30 ноября 2011

Я столкнулся с этой проблемой, когда-то назад причины этой проблемы:

  • База данных MySQL - Id не был помечен как AutoIncrement, и в моем Сервисе не было блока catch, следовательно, исключение не было зарегистрировано.

  • Изменение семантики базы данных и снова либо отсутствие блока перехвата, либо пустой блок перехвата, исключение не регистрируется.

  • Неверный log4j.xml, который вообще не регистрировал исключение !, а exp.printStackTrace() представился с исключением.

Теперь с этим вы можете окружить свой код допустимой попыткой catch и посмотреть, есть ли что-то?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...