【问题标题】:Generated column and table names in hibernate with underscore在休眠中生成的列和表名称带有下划线
【发布时间】:2011-07-11 18:02:14
【问题描述】:

如何强制休眠生成数据库模式,以便将 CamelCase 转换为下划线(使用 HBM)?例如。我有:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cz.csas.pdb.be.model.product.passive">

    <class name="foo.BarBaz">

        <id name="barBazId">
            <generator class="sequence"/>
        </id>

        <property name="extractContactType"/>
        <!-- ... -->
    </class>
</hibernate-mapping>

我希望休眠创建这样的表(oracle):

CREATE TABLE "BAR_BAZ"
  (
    "BAR_BAZ_ID"               NUMBER(19,0) NOT NULL ENABLE,
    "EXTRACT_CONTACT_TYPE"     VARCHAR2(512 CHAR),
    -- PK etc...
  )

我知道我可以在 hbm.xml 文件中使用表/列名,但我想全局设置它(既节省时间又防止错误)。

【问题讨论】:

    标签: java database hibernate jpa jpa-2.0


    【解决方案1】:

    【讨论】:

    • 它看起来应该可以正常工作,但我得到一个异常原因:org.hibernate.MappingException:不同物理引用的相同逻辑列名:account_charge.PASSIVEACCOUNT => 'passive_account' 和'被动账户';对于简单的多对一(accountCharge HBM 具有“”)。
    【解决方案2】:

    JPA 2 (Hibernate 4) 中,it is even more easier,只需添加:

    <property name="hibernate.ejb.naming_strategy"
             value="org.hibernate.cfg.ImprovedNamingStrategy" />
    

    致您的persistence.xml

    【讨论】:

    • 听起来不错,但我得到一个 SAX-Parse-Exception,它说必须定义属性“值”。可能我有一些用于hibernate.cfg.xml 的旧DTD 或Schema。使用休眠 4.3.5-Final。
    • 它工作完美,让我可以在实体上使用 camelCase,在数据库(postgresql)上使用snake_case,我使用的是 4.3.8-Final
    猜你喜欢
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    相关资源
    最近更新 更多