当前位置: 首页 > 知识库问答 >
问题:

hibernate映射创建表

公羊光明
2023-03-14

我编写了一个映射,如下所示:

<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--失败的模式语句:创建表雇员(Id整数不为空auto_increment,版本日期时间不为空,FirstName nvarchar(300),LastName nvarchar(300),雇员类型nvarchar(300),主键(Id),唯一(firstName,lastName,雇员类型)com.mysql.jdbc.exceptions.jdbc4。指定的密钥太长;最大密钥长度为1000字节sun.reflect.NativeConstructorAccessorImpl.newInstance0(本地方法)在sun.reflect.NativeConstructorAccessorImpl.new实例(NativeConstructorAccessorImpl.java:39)在sun.reflect.mpl.new实例(mpl.java:27)在java.lang.reflect.Constructor.new实例(Constructor.java:513)在com.mysql.jdbc.Util.handleNewInstance(Util.java:411)在com.mysql.jdbc.Util.get实例(Util.java:386)com.mysql.jdbc.SQLError.createSQLExc0019(SQLErrr. java: 1052)at com. mysql. jdbc。在com. mysql. jdbc.在com. mysql. jdbc.在com. mysql. jdbc.mysqlIO. sqlQueryDirect(MysqlIO. java: 2163)在com. mysql. jdbc。在com. mysql. jdbc.在com. mysql. jdbc.在com. mChange. v2. c3p0. implified上的StatementInp.在org. springframework. orm. hibernate3上更新(NewProxyState. java: 64)。在org. springframework. orm. hibernate3上的LocalSessionFactoryBean.执行模式声明(LocalSessionFactoryBean. java: 1115)。LocalSessionFactoryBean.执行模式脚本(LocalSessionFactoryBean. java: 1087)在org. springframework. orm. hibernate3。LocalSessionFactoryBean1美元. doInHibernate(LocalSessionFactoryBean. java: 942)在org. springframework. orm. hibernate3。HibernateTemplate. doExecute(HibernateTemplate. java: 406)at org. springframework. orm. hibernate3.在org. springframework. orm. hibernate3上执行(HibernateTemplate. java: 339)。LocalSessionFactoryBean. update数据库架构(LocalSessionFactoryBean. java: 935)在org. springframework. orm. hibernate3。LocalSessionFactoryBean. postSessionFactoryCreation(LocalSessionFactoryBean. java: 883)在org. springframework. orm. hibernate3。AbstractSessionFactoryBean. postProperties tiesSet(AbstractSessionFactoryBean. java: 213)在org. springframework. beans. factory. support。AbstractAutowireCapableBeanFactory. invkeInit方法(AbstractAutowireCapableBeanFactory. java: 1477),网址为org. springframework. beans. factory. support。AbstractAutowireCapableBeanFactory.初始化Bean(AbstractAutowireCapableBeanFactory. java: 1417)在org. springframework. beans. factory. support。AbstractAutowireCapableBeanFactory. doCreateBean(AbstractAutowireCapableBeanFactory. java: 519)在org. springframework. beans. factory. support。AbstractAutowireCapableBeanFactory. createBean(AbstractAutowireCapableBeanFactory. java: 456)在org. springframework. beans. factory. support。AbstractBeanFactory1美元。getObject(AbstractBeanFactory. java: 291)在org. springframework. beans. factory. support。DefaultSingletonBean注册. getSingleton(DefaultSingletonBean注册. java: 222)在org. springframework. bean. factory. support。AbstractBeanFactory. doGetBean(AbstractBeanFactory. java: 288)在org. springframework. beans. factory. support。AbstractBeanFactory. getBean(AbstractBeanFactory. java: 190)在org. springframework. beans. factory. support。DefaultListableBeanFactory. preInstantiateSingletons(DefaultListableBeanFactory. java: 563),网址为org. springframework. background. support。AbstractApplication ationContext. finishBeanFactory初始化(AbstractApplication ationContext. java: 895)在org. springframework. Context. support。更新(AbstractApplication ationContext. java: 425),网址为org. springframework. Context. support。ClassPathXmlApplication上下文)ClassPathXmlApplication ationContext. java: 139)at org. springframework. Context. support.ClassPathXmlApplication上下文)java: 83)at Main. main(Main. java: 18)

有什么问题吗?

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

共有2个答案

蒲昀
2023-03-14

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

司空鸿熙
2023-03-14

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

此错误意味着您的唯一索引(firstName、lastName、employeeType)超过了最大值1000字节。来自mysql文档

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

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

 类似资料:
  • b)对Employee类中的ReferencedColumnName='department id'使用@ManyToOne和@JoinColumn。 建议采用哪种方法?还是这两种方法用于完全不同的问题?

  • 到目前为止我得到的是: 知道我做错了什么吗?谢谢!

  • 我正在使用Hibernate和JPA注释来映射我的类。当hibernate尝试映射这个类时,我遇到了一个问题 我的Social alStat类是: 我得到了这个错误: 我猜发生这种情况是因为我试图映射到一个基本类,但@ElementCollection注释不应该解决这个问题吗? 我的item类如下所示:

  • null 帮我处理一下这种情况吧。谢谢你。

  • 本文向大家介绍JavaScript创建映射,包括了JavaScript创建映射的使用技巧和注意事项,需要的朋友参考一下 示例 映射是键到值的基本映射。映射与对象的不同之处在于,它们的键可以是任何东西(原始值和对象),而不仅仅是字符串和符号。Map上的迭代也总是按照将项目插入Map中的顺序进行,而在对象中的键上进行迭代时,顺序是不确定的。 要创建映射,请使用Map构造函数: 它具有一个可选参数,该参

  • 问题内容: 我正在开发Web应用程序。我们在项目中将Hibernate用作ORM。实际上,我们的应用程序根据用户选择动态创建一些表。用户可以选择表名,列名,然后可以从csv文件导入数据。所以我的问题是:如何用Hibernate和Java对象映射此动态创建的表? 问题答案: 它可以动态完成,但有些混乱: 在建立SessionFactory之前,您需要动态更改Hibernate的Configurati