3

データベースには、型が TINYINT(1) でデフォルト値が 0 のフィールドがあります。モデルでは、TINYINT(1) DEFAULT 0 として定義されています。ただし、以下のようなエラーが発生します。

エラー

[jar:file:/C:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/NetaCommerceFrameworkAdmin/WEB-INF/lib/NetaCommerceFramework-0.0.1-SNAPSHOT.jar!/com/netasoft/commerce/framework/lang/dao/LangDaoImpl.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type 
[org.hibernate.SessionFactory]: :Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring/admin-hibernate.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Wrong column type in kaft.nc_alert_log for column alerted. Found: bit, expected: TINYINT(1) DEFAULT 0; nested exception is 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring/admin-hibernate.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Wrong column type in kaft.nc_alert_log for column alerted. Found: bit, expected: TINYINT(1) DEFAULT 0

モデル定義

@Column(name="alerted", columnDefinition = "TINYINT(1) DEFAULT 0")
private int alerted;

public int getAlerted() {
    return alerted;
}

public void setAlerted(int alerted) {
    this.alerted = alerted;
}

Db.properties

hibernate.hbm2ddl.auto=validate
#hibernate.hbm2ddl.auto=create-drop
hibernate.hbm2ddl.import_files=/import_standard.sql
hibernate.show_sql=false
hibernate.format_sql=true
hibernate.generate_statistics=false
hibernate.use_sql_comments=true
hibernate.query.factory_class=org.hibernate.hql.ast.ASTQueryTranslatorFactory
hibernate.cache.use_query_cache=true
hibernate.cache.region.factory_class=net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
hibernate.cache.use_second_level_cache=true
#-------------------------------------------------------------------------------
# MySQL Settings

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/xxx?autoReconnect=true
jdbc.username=xxx
jdbc.password=xxx

# Property that determines which Hibernate dialect / MySQL5Dialect || MySQLDialect
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

方言バージョン:

2013-01-17 08:45:36,920 INFO [org.hibernate.cfg.SettingsFactory] - Database ->
       name : MySQL
    version : 5.0.96-community-nt
      major : 5
      minor : 0
2013-01-17 08:45:36,921 INFO [org.hibernate.cfg.SettingsFactory] - Driver ->
       name : MySQL-AB JDBC Driver
    version : mysql-connector-java-5.1.12 ( Revision: ${bzr.revision-id} )
      major : 5
      minor : 1

サーバーと別のコンピューターでも実行されています。ただし、私のコンピューターと、それを試すためだけにインストールされた新しいコンピューターでは、同じエラーが発生します。Google で何日も検索していますが、問題の原因がわかりません。モデルで boolean columnDefinition を試し、MySqlDialect の定義を変更しましたが、何も変わりませんでした。エラーメッセージも同じです。

4

3 に答える 3

3

tinyInt1isBit=false mysql ドライバー パラメーターを使用できます。すなわち jdbc:mysql://localhost?tinyInt1isBit=false

http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-configuration-properties.html

これにより、ドライバーが tinyint(1) 列を java.sql.Type.BIT として報告するのを防ぎます。

ただし、boolean フィールドが DB で tinyint(1) としても表されている場合は、問題が発生する可能性があります。

于 2013-02-22T15:12:52.020 に答える
1

次のように、@Type 注釈をアラート フィールドに追加します。

@org.hibernate.annotations.Type(type="true_false")
@Column(name="alerted", columnDefinition = "TINYINT(1) DEFAULT 0")
private int alerted;
于 2013-01-17T17:20:01.430 に答える