Java 将Hibernate 3.2.5迁移到3.6

Java 将Hibernate 3.2.5迁移到3.6,java,hibernate,Java,Hibernate,目前,我们在将应用程序从Hibernate 3.2.5迁移到3.6.1时面临很多问题 我们面临的第一个错误是: 严重:列名“btn_name”无效。虽然btn_名称没有映射到何处。实际映射是btnName 这是我的映射文件 <hibernate-mapping> <class abstract="true" name="com.sampleproject.client.beansdm.metadata.Component" table="componen

目前,我们在将应用程序从Hibernate 3.2.5迁移到3.6.1时面临很多问题

我们面临的第一个错误是:

严重:列名“btn_name”无效。虽然btn_名称没有映射到何处。实际映射是btnName

这是我的映射文件

<hibernate-mapping>
    <class abstract="true" name="com.sampleproject.client.beansdm.metadata.Component"
        table="component_master">
        <id column="metadata_id" name="id" type="long">
            <generator class="native" />
        </id>
        <property column="metadata_type" name="type" type="string" />
        <property name="createdDateTime" column="created_date" type="date"
            update="false"></property>
        <property name="version" type="string" column="version_id"></property>
        <property name="currentDate" type="date" column="curr_date"></property>
        <property name="currentIP" type="string" column="current_ip"></property>
        <many-to-one name="currentUser"
            class="com.sampleproject.client.beansdm.domain.common.User" cascade="refresh"
            column="current_user_id"></many-to-one>
        <property name="latestDate" type="date" column="latest_date"></property>
        <property name="latestIP" type="string" column="latest_ip"></property>
        <many-to-one name="latestUser"
            class="com.sampleproject.client.beansdm.domain.common.User" cascade="refresh"
            column="latest_user"></many-to-one>
        <property name="recordStatus" type="boolean" column="record_status"></property>
        <property name="portal" type="string" column="portal"></property>
        <many-to-one cascade="refresh,save-update,delete"
            class="com.sampleproject.client.beansdm.metadata.Component" column="md_id"
            name="metadata" not-null="false" />

        <joined-subclass
            name="com.sampleproject.client.beansdm.metadata.uicontrols.UIControl"
            table="ui_control_master">
            <key column="ui_control_id" />
            <property column="display_name" name="displayText" />
            <property column="help_text" name="helpText" />
            <property column="info_text" name="informativeText" />
            <property column="rows" name="rows" type="integer" />
            <property column="cols" name="cols" type="integer" />
            <property column="btnName" name="btnName" type="string" />
            <property name="version" type="string" column="version_id"></property>
            <property name="currentDate" type="date" column="curr_date"></property>
            <property name="currentIP" type="string" column="current_ip"></property>
            <many-to-one name="currentUser"
                class="com.sampleproject.client.beansdm.domain.common.User" cascade="refresh"
                column="current_user_id"></many-to-one>
            <property name="latestDate" type="date" column="latest_date"></property>
            <property name="latestIP" type="string" column="latest_ip"></property>
            <many-to-one name="latestUser"
                class="com.sampleproject.client.beansdm.domain.common.User" cascade="refresh"
                column="latest_user"></many-to-one>
            <property name="recordStatus" type="boolean" column="record_status"></property>
            <property name="portal" type="string" column="portal"></property>
            <property name="readOnly" type="boolean" column="read_only"/>

            <joined-subclass
                name="com.sampleproject.client.beansdm.metadata.uicontrols.InputControl"
                table="input_control_master" lazy="true">
                <key column="input_control_id" />
                <property column="default_value" name="defaultValue"
                    not-null="false" />
                <property column="is_fk" name="fk" />
                <property column="validatable" name="validatable" />
                <property column="violatable" name="violatable" />
                <property name="isRequired" column="is_required"></property>
                <property name="ruleType"
                    type="com.sampleproject.facadeimplementation.util1.UserEnumRuleType"
                    column="rule_type"></property>
                <property name="fileType" column="file_type"></property>
                <property name="maxFileSize" column="max_file_size" type="integer"></property>
                <property name="precision" column="input_precision" type="integer"></property>
                <property name="maxLength" column="maxlength" type="integer"></property>
                <property name="minLength" column="minlength" type="integer"></property>
                <property name="dateFormatType" column="dateformat"
                    type="com.sampleproject.facadeimplementation.util1.UserEnumDateFormatType"></property>
                <property name="specialCharAllow" column="isspecialcharallow"></property>
                <property name="specialChars" column="specialchars" type="string"></property>
                <property name="dateType"
                    type="com.sampleproject.facadeimplementation.util1.UserEnumDateType"
                    column="date_type"></property>
                <property name="minDate" column="mindate" type="string"></property>
                <property name="maxDate" column="maxdate" type="string"></property>
                <property name="inspection" column="inspection" type="boolean"></property>
                <property name="values" column="default_values" type="string"></property>
                <property name="targetNames" column="target_names" type="string"></property>
                <!--
                    <many-to-one cascade="save-update, delete"
                    class="com.sampleproject.client.beansdm.metadata.Column"
                    column="target_column_id" name="targetColumn" />
                -->
                <property name="targetColumn" column="target_column" type="string"></property>
                <property name="templateName" column="template_name" type="string"></property>
                <!--
                    <bag name="targetColumnNames" cascade="save-update"
                    table="input_possible_columns_map"> <key
                    column="input_control_id"></key> <element column="column_name"
                    not-null="true" type="string" /> </bag>
                -->
                <!--<bag name="possibleValues" cascade="save-update" table="input_possible_values_map">
                    <key column="input_control_id" />
                    <many-to-many
                        class="com.sampleproject.client.beansdm.metadata.uicontrols.PossibleValue"
                        column="value" />
                </bag>
                --><property name="seperator" column="seperator" type="string" />
                <many-to-one name="refTable" cascade="refresh"
                    class="com.sampleproject.client.beansdm.metadata.Table" column="ref_table_id" lazy="false">
                </many-to-one>
                <many-to-one name="targetTable" cascade="refresh"
                    class="com.sampleproject.client.beansdm.metadata.Table" column="target_table_id" />
                <property name="version" type="string" column="version_id"></property>
                <property name="currentDate" type="date" column="curr_date"></property>
                <property name="currentIP" type="string" column="current_ip"></property>
                <many-to-one name="currentUser"
                    class="com.sampleproject.client.beansdm.domain.common.User" cascade="refresh"
                    column="current_user_id"></many-to-one>
                <property name="latestDate" type="date" column="latest_date"></property>
                <property name="latestIP" type="string" column="latest_ip"></property>
                <many-to-one name="latestUser"
                    class="com.sampleproject.client.beansdm.domain.common.User" cascade="refresh"
                    column="latest_user"></many-to-one>
                <property name="recordStatus" type="boolean" column="record_status"></property>
                <property name="portal" type="string" column="portal"></property>
                <many-to-one name="linkedColumn" cascade="refresh"
                    class="com.sampleproject.client.beansdm.metadata.Column" column="linked_column_name">
                </many-to-one>
                <many-to-one name="linkedMasterColumn" cascade="refresh"
                    class="com.sampleproject.client.beansdm.metadata.Column" column="linked_master_column">
                </many-to-one>
                <many-to-one name="linkedTable" cascade="refresh"
                    class="com.sampleproject.client.beansdm.metadata.Table" column="linked_master_id">
                </many-to-one>
            </joined-subclass>
        </joined-subclass>
    </class>
</hibernate-mapping>

关注com.sampleproject.client.beansdm.metadata.uicontrols.InputControl连接子类映射有一个名为Btname的字段。它在3.2.5版本下运行良好,但当我将其更改为更新的hibernate版本时,它停止响应

是否存在任何可能的jar冲突

请帮忙

谢谢你, 关于,

当从3.5移动到3.6时,指南规定:

但是,对于仍然使用hbm.xml的用户 你应该知道我们选择了 使用 org.hibernate.cfg.ejb3命名策略 改为在注释配置中使用 老年人 org.hibernate.cfg.DefaultNamingStrategy 历史上用于配置。 这可能会导致命名不匹配1 已知这是一个问题的地方是 如果您依靠命名策略 默认关联的名称 (多对多和 元素)表。如果你发现自己 在这种情况下,你可以说 Hibernate以使用遗留的 org.hibernate.cfg.DefaultNamingStrategy 打电话 配置#设置策略和 通过它 org.hibernate.cfg.DefaultNamingStrategy#实例

NamingStrategy
接口定义了几种方法,如
String foreignKeyColumnName(String propertyName、String propertyEntityName、String propertyTableName、String referencedColumnName)
,用于确定由实现的列和关联的名称。我建议您在
EJB3NamingStrategy
类中查看这些方法的实现,并了解如何将属性名转换为列名


hibernate现在似乎正在通过这些转换将下划线添加到它期望的DB中的列名中,当在您的数据库中找不到结果列名“btn_name”时,它会感到不安。

回答很好…我可以通过扩展EJB3NamingStrategy并重写方法并提供一些地方来更好地理解hibernate来创建自己的EJB3NamingStrategy吗?我的最后一步应该是什么??我有将近190个表,几乎不可能将所有表的hbm转换为注释。我感谢您的时间和努力,谢谢。您不必为了使用不同的NamingStrategy而从hbm更改为annotations。有关如何实施新的NamingStrategy的详细信息,请参阅。您甚至可以扩展EJB3NamingStrategy,只需更改引起悲伤的名称。我还将在您的配置文件中打开show_sql选项,以便您可以确切地看到hibernate用于访问数据库的命令。