Java 将Hibernate 3.2.5迁移到3.6
目前,我们在将应用程序从Hibernate 3.2.5迁移到3.6.1时面临很多问题 我们面临的第一个错误是: 严重:列名“btn_name”无效。虽然btn_名称没有映射到何处。实际映射是btnName 这是我的映射文件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-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用于访问数据库的命令。