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 -- 警告 -- 失敗したスキーマ ステートメント: create table Employee (ID integer not null auto_increment、version datetime not null、FirstName nvarchar(300)、LastName nvarchar(300)、EmployeeType nvarchar(300) )、主キー (Id)、一意 (firstName、lastName、employeeType)) com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 指定されたキーが長すぎます。キーの最大長は 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

指定されたキーが長すぎました。キーの最大長は1000バイトです

このエラーは、一意のインデックス(firstName、lastName、employeeType)が最大である1000バイトを超えていることを意味します。mysqlドキュメントから

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

したがって、長さが300のフィールドが3つあることがわかります。したがって、サイズが300 * 3 * 3 =2700>1000のインデックスを持つ可能性があります。

于 2012-05-15T13:01:42.330 に答える
2

MyISAM エンジンには既知の問題があります。このリンクを試して、エンジンを InnoDB に変更できます。

于 2012-05-15T12:56:44.430 に答える