0

当我尝试使用字段 BigDecimal (new BigDecimal("1.0")) 添加对象时,出现此错误:

16:00:59.058 [main] DEBUG ohejdbc.spi.SqlExceptionHelper - SQLite JDBC 驱动程序未实现 [n/a] java.sql.SQLException: org.sqlite.Unused.unused(Unused.java 的 SQLite JDBC 驱动程序未实现:29) ~[sqlite-jdbc-3.7.2.jar:na] at org.sqlite.Unused.setBigDecimal(Unused.java:58) ~[sqlite-jdbc-3.7.2.jar:na] at sun.reflect .NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0_38] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[na:1.6.0_38] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl. java:25) ~[na:1.6.0_38] 在 java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_38] 在 org.hibernate.engine.jdbc.internal.proxy。 AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122) ~[hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) ~[hibernate-core -4.1.4.Final.jar:4.1.4.Final] at $Proxy20.setBigDecimal(Unknown Source) ~[na:na] at org.hibernate.type.descriptor.sql.DecimalTypeDescriptor$1.doBind(DecimalTypeDescriptor.java: 58) ~[hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:92) [hibernate-core-4.1. 4.Final.jar:4.1.4.Final] 在 org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:305) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org .hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:300) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate。type.AbstractSingleColumnStandardBasicType.nullSafeSet(AbstractSingleColumnStandardBasicType.java:57) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2602) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2579) [hibernate-core-4.1.4.Final.jar :4.1.4.Final] 在 org.hibernate.persister.entity.AbstractEntityPersister$4.bindValues(AbstractEntityPersister.java:2760) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate .id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:60) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java :2767)[hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3278)[hibernate-core-4.1.4.Final .jar:4.1.4.Final] 在 org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org. hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue. java:203) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:183) [hibernate-core-4.1.4 .Final.jar:4.1.4.Final] 在 org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:167) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:320) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal .AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:287) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193) [ hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126) [hibernate-core-4.1.4.Final.jar: 4.1.4.Final] 在 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener. java:114) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) [hibernate-core-4.1.4 .Final.jar:4.1.4.Final] 在 org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:728) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org. hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:720) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.engine.spi.CascadingAction$5.cascade(CascadingAction.java :258) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380) [hibernate-core-4.1.4.Final .jar:4.1.4.Final] 在 org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org. hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade. java:409) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:350) [hibernate-core-4.1.4 .Final.jar:4.1.4.Final] 在 org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在org.hibernate.engine.internal。Cascade.cascadeProperty(Cascade.java:208) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165) [hibernate -core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:448) [hibernate-core-4.1.4.Final.jar:4.1 .4.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:293) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event。 internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126) [休眠核心4.1.4.Final.jar:4.1.4。最终] 在 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener .entityIsTransient(DefaultSaveOrUpdateEventListener.java:189) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114) [hibernate- core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) [hibernate-core-4.1.4.Final.jar:4.1. 4.Final] 在 org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:728) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:720) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.engine.spi.CascadingAction$5.cascade(CascadingAction.java :258) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380) [hibernate-core-4.1.4. Final.jar:4.1.4.Final] 在 org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org .hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade .java:409) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:350) [hibernate-core-4.1. 4.Final.jar:4.1.4.Final] 在 org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org .hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.engine.internal.Cascade.cascade(Cascade .java:165) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:448) [hibernate-core-4.1. 4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:293) [hibernate-core-4.1.4.Final.jar:4.1.4.Final]在 org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate .event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java :189) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114) [hibernate-core-4.1.4. Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:728) [hibernate-core-4.1.4.Final.jar :4.1.4.Final] 在 org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:720) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.engine。 spi.CascadingAction$5.cascade(CascadingAction.java:258) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380 ) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) [hibernate-core-4.1.4.Final. jar:4.1.4.Final] 在 org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate .engine.internal.Cascade。cascadeCollectionElements(Cascade.java:409) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:350) [hibernate-core -4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326) [hibernate-core-4.1.4.Final.jar:4.1.4 .Final] 在 org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.engine.internal。 Cascade.cascade(Cascade.java:165) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:448) [hibernate -core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:293) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193) [hibernate-core-4.1.4 .Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId( DefaultSaveEventListener.java:55) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49) [hibernate-core-4.1.4 .Final.jar:4.1.4.Final] 在 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:757) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.internal.SessionImpl.save(SessionImpl.java: 749) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] 在 org.hibernate.internal.SessionImpl.save(SessionImpl.java:745) [hibernate-core-4.1.4.Final.jar :4.1.4.Final] 在 database.sqlite.sessionsworkers.InsertSessionWorker.applyOnDatabase(InsertSessionWorker.java:25) [classes/:na] 在 database.sqlite.sessionsworkers.InsertSessionWorker.applyOnDatabase(InsertSessionWorker.java:1) [classes/:na] 在 database.local.sqlite.SQLite.doTransaction(SQLite.java:108) [classes/:na] 在数据库.local.sqlite.SQLite.save(SQLite.java:137) [classes/:na] 在 database.local.sqlite.SQLite.saveOwner(SQLite.java:173) [classes/:na] 在 database.local.sqlite .SQLiteTest.create_database(SQLiteTest.java:67) [test-classes/:na] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0_38] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39) ~[na:1.6.0_38] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0_38] at java.lang.reflect.Method.invoke(Method.java:第597章~[na:1.6.0_38]在org.junit.runners。model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) [junit-4.10.jar:na] at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) [junit-4.10.jar: na] 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) [junit-4.10.jar:na] 在 org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20 ) [junit-4.10.jar:na] at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) [junit-4.10.jar:na] at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java :68) [junit-4.10.jar:na] at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) [junit-4.10.jar:na] at org.junit.runners.ParentRunner$3.run( ParentRunner.java:231) [junit-4.10.jar:na] 在 org.junit.runners。ParentRunner$1.schedule(ParentRunner.java:60) [junit-4.10.jar:na] at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) [junit-4.10.jar:na] at org.junit .runners.ParentRunner.access$000(ParentRunner.java:50) [junit-4.10.jar:na] at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) [junit-4.10.jar:na]在 org.junit.runners.ParentRunner.run(ParentRunner.java:300) [junit-4.10.jar:na] 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) [ .cp/:na] 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) [.cp/:na] 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner .runTests(RemoteTestRunner.java:467) [.cp/:na] at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) [.cp/:na] 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) [.cp/:na] 在 org.eclipse.jdt.internal.junit。 runner.RemoteTestRunner.main(RemoteTestRunner.java:197) [.cp/:na]

4

2 回答 2

2

@Boris the Spider 在注释中你可以写

@Type (type="utils.BigDecimalToStringType")
private BigDecimal bigDecimal;

(我不能发表评论,因为我的声誉很低)

PS我不知道你为什么在那里有摘要。

于 2013-08-18T17:02:40.670 回答
1

来自错误“未由 SQLite JDBC 驱动程序实现”-因此推测 SQLLite 不支持该数据类型。
也许实现 aUserType并将其另存为String?

public class BigDecimalToStringType implements UserType {

    private static final int[] SQL_TYPES = {Types.VARCHAR};

    @Override
    public int[] sqlTypes() {
        return SQL_TYPES;
    }

    /**
     *
     * @return
     */
    @Override
    public Class<BigDecimal> returnedClass() {
        return BigDecimal.class;
    }

    @Override
    public Object nullSafeGet(final ResultSet resultSet, final String[] names, final SessionImplementor si, final Object owner) throws HibernateException, SQLException {
        final String value = StandardBasicTypes.STRING.nullSafeGet(resultSet, names[0], si);
        if (value != null) {
            return new BigDecimal(value);
        }
        return null;
    }

    @Override
    public void nullSafeSet(final PreparedStatement preparedStatement, final Object value, final int index, final SessionImplementor si) throws HibernateException, SQLException {
        if (null == value) {
            preparedStatement.setNull(index, Types.VARCHAR);
        } else {
            StandardBasicTypes.STRING.nullSafeSet(preparedStatement, ((BigDecimal) value).toPlainString(), index, si);
        }
    }

    @Override
    public Object deepCopy(final Object value) throws HibernateException {
        return value;
    }

    @Override
    public boolean isMutable() {
        return false;
    }

    @Override
    public Object assemble(final Serializable cached, final Object owner) throws HibernateException {
        return cached;
    }

    @Override
    public Serializable disassemble(final Object value) throws HibernateException {
        return (Serializable) value;
    }

    @Override
    public Object replace(final Object original, final Object target, final Object owner) throws HibernateException {
        return original;
    }

    @Override
    public int hashCode(final Object x) throws HibernateException {
        return x.hashCode();
    }

    @Override
    public boolean equals(final Object x, final Object y) throws HibernateException {
        if (x == y) {
            return true;
        }
        if (null == x || null == y) {
            return false;
        }
        return x.equals(y);
    }
}

不快,但你不会失去精度。默认情况下,hibernate 会生成 a VARCHAR(255),因此您可能希望将其延长。
您将需要在您的休眠映射中指定这一点:

<property name="myValuePropertyName" type="com.my.package.name.BigDecimalToStringType"/>

然后休眠将使用它来持久化数据。
也许有JPA知识的善良灵魂会给你同等的注释......

于 2013-02-20T15:23:05.057 回答