Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Hibernate и добавление записей в MS SQL таблицу


Автор: SID_M 23.12.2008, 10:27
Доброго времени суток. Вопрос заключается в следующем.
У меня есть табличка в базе MS SQL Server, которая хранит запланированные платежи. В таблице объявлен суррогатный автоинкрементный ключ. Файл маппинга для этой таблички выглядит следующим образом:
Код

<hibernate-mapping>
    <class name="mymoney.persistence.Plannedpayment" table="PLANNEDPAYMENT" schema="dbo" catalog="my_money">
        <id name="id" type="int">
            <column name="ID" />
            <generator class="identity" />
        </id>
        <many-to-one name="paymenttype" class="mymoney.persistence.Paymenttype" fetch="join">
            <column name="PAYMENTTYPE" not-null="true" />
        </many-to-one>
        <many-to-one name="appuser" class="mymoney.persistence.Appuser" fetch="select">
            <column name="USERID" not-null="true" />
        </many-to-one>
        <property name="paymentdate" type="timestamp">
            <column name="PAYMENTDATE" length="23" />
        </property>
        <property name="debitamount" type="big_decimal">
            <column name="DEBITAMOUNT" precision="15" not-null="true" />
        </property>
        <property name="creditamount" type="big_decimal">
            <column name="CREDITAMOUNT" precision="15" not-null="true" />
        </property>
        <property name="ground" type="string">
            <column name="GROUND" length="500" />
        </property>
    </class>
</hibernate-mapping>


Далее в процедуре обработки сообщения от кнопки на странице Visual JSF (написано с использованием IDE NetBeans 6.5) я добавляю новую запись. Выглядит это так:
Код

    public String addBtn_action() {

        // тут идёт инициализация параметров...

        Session session = HibernateUtil.getSessionFactory().getCurrentSession();

        session.beginTransaction();
        Query paymentTypeQuery = session.createQuery("from Paymenttype p where p.id = :id").
                setInteger("id", Integer.valueOf(newPaymentTypeDropDown.getValue().toString()));
        Paymenttype newPaymentType = (Paymenttype) paymentTypeQuery.uniqueResult();

        Plannedpayment newPlannedPayment =
                new Plannedpayment(0,
                newPaymentType,
                getSessionBean1().getCurrentUser(),
                newPaymentPlannedDate.getSelectedDate(),
                debitAmount,
                creditAmount,
                groundValue);

        session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.persist(newPlannedPayment);
        session.getTransaction().commit();

        // тут вызывается процедура обновления набора данных для таблички (чтобы отобразить добавленные и измененные элементы)

        return null;
    }


Один раз этот код отрабатывает нормально. Однако больше одной записи добавить не могу.  smile  Очень похоже, что с генератором это никак не связано. Удалял добавленные записи из базы, добавлял снова счетчик генерировался нормально, но больше одной записи добавить не могу. Debuger не заходит в обработчик!!!  smile  Это никак объяснить не получается.
Помогите, что не так? Как нормально добавлять записи?

Автор: barracuda477 23.12.2008, 19:52
сможешь вытащить SQL, которую пихает хибернейт в MSSQL (либо логгированием запросов от хибера, либо на входе в MSSQL) ?

Автор: ivg 23.12.2008, 21:34
Цитата(SID_M @  23.12.2008,  13:27 Найти цитируемый пост)
Debuger не заходит в обработчик!!!

Такое бывает когда в JSF на странице валидация чего либо не проходит, тогда Экшены в обычном случае не вызываются. Добавьте <h:messages ...  /> на страницу. Ну и на всякий случай проверьте несколькими вызовами addBtn_action() возможность добавлять несколько записей из кода как обычное приложение, а не со страницы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)