Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > hibernate, mapping, первичный ключ


Автор: Adept 15.11.2006, 15:05
При попытке вставить запись в БД вылазит такая ошибка.
Код

Hibernate: insert into WebminDB.dbo.tbDepartments (ParentDID, DepartmentName, DepType, Account, BankCode, UNN, AddressID, Telephone, LastModify) values (?, ?, ?, ?, ?, ?, ?, ?, ?)
[ WARN] 14:55:15 JDBCExceptionReporter - SQL Error: 515, SQLState: 23000
[ERROR] 14:55:15 JDBCExceptionReporter - Cannot insert the value NULL into column 'DID', table 'WebminDB.dbo.tbDepartments'; column does not allow nulls. INSERT fails.
[DEBUG] 14:55:16 ApplicationDispatcher - servletPath=/WEB-INF/jsp/dataAccessFailure.jsp, pathInfo=null, queryString=null, name=null

DID это первичный ключ, not null. Что я в маппинге неправильно написал?
маппинг
Код

<hibernate-mapping>
    <class name="springdb.model.Department" table="tbDepartments" schema="dbo" catalog="WebminDB">
        <id name="did" type="java.lang.Long">
            <column name="DID" precision="18" scale="0" />
            <generator class="native" />
        </id>
        <property name="parentDid" type="java.lang.Long">
            <column name="ParentDID" precision="18" scale="0" />
        </property>
        <property name="departmentName" type="java.lang.String">
            <column name="DepartmentName" length="250"  not-null="true"/>
        </property>
        <property name="depType" type="java.lang.Long">
            <column name="DepType" precision="10" scale="0" not-null="true" />
        </property>
        <property name="account" type="java.lang.String">
            <column name="Account" length="50" />
        </property>
        <property name="bankCode" type="java.lang.Integer">
            <column name="BankCode" />
        </property>
        <property name="unn" type="java.lang.Long">
            <column name="UNN" precision="18" scale="0"/>
        </property>
        <property name="addressId" type="java.lang.Long">
            <column name="AddressID" precision="18" scale="0"/>
        </property>
        <property name="telephone" type="java.lang.String">
            <column name="Telephone" length="50"/>
        </property>
        <property name="lastModify" type="java.util.Date">
            <column name="LastModify" length="23"/>
        </property>          
    </class>
</hibernate-mapping>

Если надо вот структура таблицы
Код

CREATE TABLE [dbo].[tbDepartments] (
    [DID] [numeric](18, 0) NOT NULL ,
    [ParentDID] [numeric](10, 0) NULL ,
    [DepartmentName] [varchar] (250) COLLATE Cyrillic_General_CI_AS NOT NULL ,
    [DepType] [numeric](10, 0) NOT NULL ,
    [Account] [varchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,
    [BankCode] [int] NULL ,
    [UNN] [numeric](18, 0) NULL ,
    [AddressID] [numeric](18, 0) NULL ,
    [Telephone] [varchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,
    [LastModify] [datetime] NULL 
) ON [PRIMARY]
GO

Автор: tux 15.11.2006, 15:23
Попробуй generator поменять, например, на increment и посмотри что будет. Если работает, то надо читать про реализацию генератора типа native для данной конкретной СУБД, возможно надо генератор значений в БД создавать или еще что-то.

Автор: Adept 15.11.2006, 15:45
Да, ты прав. Поставил increment, добавляет. Спасиба.

Автор: kkorsakoff 15.11.2006, 17:54
Диалект правильный выбрал в hibernate.cfg.xml?

Автор: Adept 16.11.2006, 10:44
У меня приложение на спринге
Код

<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.generate_statistics">true</prop>
</props>
</property>

СУБД MSSQLServer2005

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