0

我写了一个映射如下:

<hibernate-mapping auto-import="true" default-lazy="false">
    <class name="com.saman.entity.hibernate.EmployeeEntity"
           table="Employee" optimistic-lock="version">

        <id name="id" type="java.lang.Integer" >
            <column name="Id" />
            <generator class="identity"/>
        </id>
        <timestamp name="version" source="db"/>
        <property  name="firstName">
            <column name="FirstName" sql-type="nvarchar(300)"/>
        </property>
        <property name="lastName">
            <column name="LastName" sql-type="nvarchar(300)"/>
        </property>
        <property name="employeeType">
            <column name="EmployeeType" sql-type="nvarchar(300)"/>
        </property>
        <!--
        <set name="shifts" table="Shifts" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="Id" not-null="true"/>
            </key>
            <one-to-many class="com.saman.entity.hibernate.ShiftEntity"/>
        </set>
        -->
        <properties name="u1" unique="true">
            <property name="firstName"/>
            <property name="lastName"/>
            <property name="employeeType"/>
        </properties>

    </class>
</hibernate-mapping>

当我运行我的应用程序时,会发生如下错误:

2012-05-15 17:12:38,651 -- WARN -- 不成功的模式语句:创建表 Employee(Id 整数不为 null auto_increment,版本日期时间不为 null,FirstName nvarchar(300),LastName nvarchar(300),EmployeeType nvarchar(300 ), 主键 (Id), 唯一 (firstName, lastName, employeeType)) com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 java 的最大密钥长度是 1000 字节.lang.reflect.Constructor.newInstance(Constructor.java:513) 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 在 com.mysql.jdbc.Util。

它有什么问题?

我使用 mysql,我在 MAMP 上运行它。

4

2 回答 2

2

MyISAM 引擎存在已知问题。您可以尝试此链接将引擎更改为 InnoDB:

于 2012-05-15T12:56:44.430 回答
2

指定的密钥太长;最大密钥长度为 1000 字节

此错误意味着您的唯一索引(名字、姓氏、雇员类型)超过 1000 个字节,这是最大值。来自 mysql 文档

"UTF-8 encoding of the Unicode character set using one to three bytes per character"

因此您可以看到您有三个长度为 300 的字段,因此您可能有一个大小为 300* 3 * 3 = 2700 > 1000 的索引

于 2012-05-15T13:01:42.330 回答