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(ネイティブ メソッド) ~[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] at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_38] at org.hibernate.engine.jdbc.internal.proxy. AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122) ~[hibernate-core-4.1.4.Final.jar:4.1.4.Final] 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(不明なソース) ~[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] at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:305) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org .hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:300) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at 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(AbstractEntityPersisterjava:2602) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at 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] at 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] org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3278) [hibernate-core-4.1.4.Final] .jar:4.1.4.Final] at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at 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] at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:183) [hibernate-core-4.1.4 .Final.jar:4.1.4.Final] at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:167) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:320) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.event.internal .AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:287) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193) [ hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126) [hibernate-core-4.1.4.Final.jar: 4.1.4.Final] at 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) org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener. java:114) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) [hibernate-core-4.1.4 .Final.jar:4.1.4.Final] at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:728) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at 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] at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at 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] at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:350) [hibernate-core-4.1.4 .Final.jar:4.1.4.Final] at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at 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.cascade(Cascade.java:165) [hibernate -core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:448) [hibernate-core-4.1.4.Final.jar:4.1 .4.Final] at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:293) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.event. internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at 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] at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114) [hibernate- org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) で [hibernate-core-4.1.4.Final.jar:4.1. 4.Final] at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:728) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at 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] at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380) [hibernate-core-4.1.4. Final.jar:4.1.4.Final] at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at 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] at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:350) [hibernate-core-4.1. 4.Final.jar:4.1.4.Final] at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at 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.cascade(Cascade) .java:165) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:448) [hibernate-core-4.1. 4.Final.jar:4.1.4.Final] at 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] at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at 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] at 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] at 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] at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380) ) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) [hibernate-core-4.1.4.Final. jar:4.1.4.Final] at 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] at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:350) [hibernate-core -4.1.4.Final.jar:4.1.4.Final] at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326) [hibernate-core-4.1.4.Final.jar:4.1.4 .Final] at 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.cascade(Cascade.java:165) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at 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] at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193) [hibernate-core-4.1.4 .Final.jar:4.1.4.Final] at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126) [hibernate-core-4.1.4.Final.jar:4.1.4.Final] at 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.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] at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49) [hibernate-core-4.1.4 .Final.jar:4.1.4.Final] at 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] at database.local.sqlite.SQLite.saveOwner(SQLite.java:173) [classes/:na] at database.local.sqlite .SQLiteTest.create_database(SQLiteTest.java:67) [test-classes/: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] で 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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) [junit-4.10.jar:na] 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] org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) [.cp/:na] at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) [.cp/:na] at 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はそのデータ型をサポートしていません。
多分 a を実装しUserTypeて として保存し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 は を作成するVARCHAR(255)ため、これを長くしたい場合があります。
したがって、休止状態のマッピングでこれを指定する必要があります。

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

そして、休止状態はそれを使用してデータを永続化します。
たぶん、JPA知識のある親切な魂があなたに同等の注釈を与えるでしょう...

于 2013-02-20T15:23:05.057 に答える