Hibernate Apache Derby 自定义序列

Posted

技术标签:

【中文标题】Hibernate Apache Derby 自定义序列【英文标题】:Hibernate Apache Derby Custom Sequence 【发布时间】:2010-12-25 05:02:59 【问题描述】:

我正在研究Hibernate的ID序列生成中的生成器类。

我尝试在一个非常简单的映射上使用序列生成器

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.test">
    <class name="Customer" table="Customer">
        <id name="id" column="ID" type="long">
            <generator class="sequence">
                <param name="sequence">CUSTOMER_SEQUENCE</param>
            </generator>
        </id>
        <property name="name" type="string" column="CUSTOMER_NAME" />
    </class>
</hibernate-mapping>

我用的是apache derby,customer表中的ID列就是一个简单的long数据类型。

但是当我尝试执行简单的保存时,我遇到了以下错误。

原因:java.sql.SQLSyntaxErrorException:SEQUENCE 'CUSTOMER_SEQUENCE' 不存在。 这是否意味着 Apache Derby 不支持序列生成?谢谢

【问题讨论】:

【参考方案1】:

Derby 似乎不支持序列生成。引用官方Derby FAQ:

Derby 支持生成的“身份” 列;示例在参考 指导。 IDENTITY_VAL_LOCAL 函数 返回最近分配的 号码。

正在进行添加 SEQUENCE 的工作 支持 Derby 10.6。

【讨论】:

【参考方案2】:

Derby 现在支持序列生成,如下:

http://db.apache.org/derby/docs/10.8/ref/rrefsqljcreatesequence.html

【讨论】:

如果您使用的是 3.6.0 Final 之前的休眠版本,您可能会遇到这个问题:hibernate.atlassian.net/browse/HHH-5427 当然,我有这个错误,并更新到 Hibernate 3.6.10.Final ;)

以上是关于Hibernate Apache Derby 自定义序列的主要内容,如果未能解决你的问题,请参考以下文章

apache derby是个啥东西

Apache Derby-02通过IJ简单操作DERBY

Derby 在使用 Maven 时给出 ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver

Apache Derby倒斗之路-01小道消息

org.apache.derby.jdbc.ClientDriver 在哪里?

小巧数据库 Apache Derby 使用攻略