2011-08-27 55 views
1

這是我第一次使用Eclipse和JDO。在Eclipse中使用Schema Tool生成DDL時遇到問題。JDO無法爲Apache Derby映射java.lang.Boolean

一個Java類的字段的樣子如下:

@Persistent 
@Column(name = "Enabled", jdbcType = "BOOLEAN") 
private boolean enabled = true; 

我已經成功地加強了與增強工具類的,但是當我跑架構工具(與derbyclient.jar中的JDBC驅動程序),被記錄以下錯誤消息:

18:47:26164(主)ERROR [DataNucleus.SchemaTool] - 一個例外是 SchemaTool的操作期間拋出。請參閱日誌 的全部細節。以下內容可能會有所幫助:JDBC類型BOOLEAN聲明爲 java類型java.lang.Boolean的字段「org.company.core.User.enabled」 無法映射此數據存儲區。 JDBC類型BOOLEAN聲明爲 java類型java.lang.Boolean的字段「org.company.core.User.enabled」 無法映射此數據存儲區。 org.datanucleus.exceptions.NucleusException:爲Java類型的字段「org.company.core.User.enabled」聲明的JDBC類型BOOLEAN java.lang.Boolean不能映射此數據存儲。在 org.datanucleus.store.rdbms.mapping.RDBMSMappingManager.getDatastoreMappingClass(RDBMSMappingManager.java:329) 在 org.datanucleus.store.rdbms.mapping.RDBMSMappingManager.createDatastoreMapping(RDBMSMappingManager.java:533) 在 有機datanucleus.store.mapped.mapping.SingleFieldMapping.prepareDatastoreMapping(SingleFieldMapping.java:55) 在 org.datanucleus.store.mapped.mapping.SingleFieldMapping.initialize(SingleFieldMapping.java:44) 在 org.datanucleus.store。 mapped.mapping.MappingFactory.createMapping(MappingFactory.java:97) at org.datanucleus.store.mapped.mapping.AbstractMappingManager.getMapping(AbstractMappingManager.java:255) 在 org.datanucleus.store.rdbms.table.ClassTable.manageMembers(ClassTable.java:571) 在 org.datanucleus.store.rdbms.table.ClassTable.manageClass(ClassTable.java:451) 在 有機.datanucleus.store.rdbms.table.ClassTable.initializeForClass(ClassTable.java:1111) 在 org.datanucleus.store.rdbms.table.ClassTable.initialize(ClassTable.java:268) 在 org.datanucleus.store .rdbms.RDBMSStoreManager $ ClassAdder.initializeClassTables(RDBMSStoreManager.java:2439) 在 org.datanucleus.store.rdbms.RDBMSStoreManager $ ClassAdder.addClassTablesAndValidate(RDBMSStoreManager.java:2346) 在 org.datanucleus.store.rdbms.RDBMSStoreManager $ ClassAdder.run在 org.datanucleus.store在 org.datanucleus.store.rdbms.AbstractSchemaTransaction.execute(AbstractSchemaTransaction.java:113)(RDBMSStoreManager.java:1996) .rdbms.RDBMSStoreManager.createSchema(RDBMSStoreManager.java:3114) 在 org.datanucleus.store.schema.SchemaTool.createSchema(SchemaTool.java:443) 在org.datanucleus.store.schema.SchemaTool.main(SchemaTool。Java的:378)

我已經檢查的Apache Derby的手冊,數據庫支持布爾數據類型: http://db.apache.org/derby/docs/10.8/ref/rrefsqljBoolean.html

什麼是錯誤的原因是什麼?

在此先感謝。

回答

1

DataNucleus將工作正常持續布爾Java字段爲布爾值jdbc類型,對我來說,使用DataNucleus 3.x和Derby 10.7.1.1。

的DataNucleus將日誌告訴你什麼清楚的JDBC類型實際上是由德比的釋放(即什麼德比聲稱通過JDBC支持電話 - 什麼手冊上說是不一定相同)的支持。

+0

事實上,布爾數據類型才被加入到最近的德比的排放;舊版本不支持它,你需要使用整數(或升級你的Derby版本)。 –

+0

我使用DataNucleus將3.0.1和Apache Derby 10.8.1.2,但是當我跑架構工具它給了我這麼一個錯誤信息。但後來我改變該字段使用整數類型(int),它運作良好。 :) – GraphiteCube

+0

你得到一個錯誤,所以你讀的日誌。正如我所說,爲我工作。 「JDBC-Types:null,BLOB,CLOB,TIMESTAMP,TIME,DATE,BOOLEAN,VARCHAR,DECIMAL,NUMERI C,CHAR,BINARY,REAL,LONGVARCHAR,FLOAT,LONGVARBINARY,SMALLINT,VARBINARY,INTEGER,BIGINT,DOUBLE,JAVA_OBJECT 「 – DataNucleus