Нет исключения Hibernate на той же вставке данных - PullRequest
0 голосов
/ 24 декабря 2010

Спящий новичок здесь. Я совершенно не уверен, почему я не получаю никаких исключений при выполнении кода ниже. С первой попытки этот код создает запись в моей книге. Но меня беспокоит то, что когда я снова выполню приведенный ниже код, Hibernate не выдает никакой ошибки. На самом деле я ожидал какого-то Нарушения ограничений первичного ключа, как то, что я делал в JDBC код.

public class BookDao {
    public void createBook(Book bookObj) {
        Session session = HibernateUtil.getSessionFactory()
                .getCurrentSession();
        session.beginTransaction();
        session.saveOrUpdate(bookObj);
        session.getTransaction().commit();
    }
}

public class HibernateUtil {
    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            return new AnnotationConfiguration().configure()
                    .buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            ex.printStackTrace();
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

public class BookDBStarter {
    public static void main(String[] args) {
        Book bookHF = new Book();
        bookHF.setIsbn("HF-12345");
        bookHF.setName("Head First HTML");
        bookHF.setPublishDate(new Date());

        BookDao daoBook = new BookDao();
        daoBook.createBook(bookHF);
    }
}

Это нормальный режим гибернации? И как я узнаю, что моя вставка прошла успешно? Есть мысли?

Ответы [ 2 ]

1 голос
/ 25 декабря 2010

Предположим, что booknumber является первичным ключом, я надеюсь, вы упомянули его как первичный ключ. Затем в методе createBook () вы начали очень хорошо, но вы используете session.saveOrUpdate (bookObj); заявление.Из-за этого вы не получаете никаких исключений нарушения ключа.При сохранении он ищет запись, если ее нет, то она сохраняет ее в дБ, но если она присутствует, она обновляет эту запись, и, следовательно, вы не получите никаких исключений.Вместо этого, если вы используете оператор session.save (bookObj); , то он определенно даст вам исключение первичного ключа, если вы правильно определите первичный ключ.

0 голосов
/ 05 января 2011

Вам нужно опубликовать больше информации, например, первичный ключ таблицы. Вы не получите исключение Hibernate при использовании saveOrUpdate, если не измените значение первичного ключа уже сохраненного объекта.

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