2011-08-27 50 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