granseier
I'm new here

Tabelle per API anlegen und Datensätze anlegen

Hallo zusammen,

ich versuch gerade per API einen Datenbanktabelle nach den Vorgaben dieses Posts zu implementieren.

Die Anlage der Datenbank und der Tabelle werfen soweit keine Fehler.

Wenn ich dann jedoch versuche Daten in die Tabelle zu schreiben kommt der folgende Fehler:

java.lang.NullPointerException

    at de.espirit.or.impl.AbstractSessionHandler.safeClose(AbstractSessionHandler.java:303)

    at de.espirit.or.impl.AbstractSessionHandler.fetchByKeys(AbstractSessionHandler.java:209)

    at de.espirit.firstspirit.content.ContentManagerImpl$TemporalSessionHandler.fetchByKeys(ContentManagerImpl.java:1175)

    at de.espirit.firstspirit.content.ContentManagerImpl.fetchByKeys(ContentManagerImpl.java:539)

    at de.espirit.firstspirit.store.access.templatestore.SessionHandlerImpl.fetchByKeys(SessionHandlerImpl.java:75)

    at de.espirit.or.impl.AbstractSession.load(AbstractSession.java:774)

    at de.espirit.or.impl.EntityImpl.doLoad(EntityImpl.java:666)

    at de.espirit.or.impl.EntityImpl.getValue(EntityImpl.java:175)

    at de.espirit.or.impl.EntityImpl.getValue(EntityImpl.java:132)

    at de.espirit.or.impl.EntityImpl.getGid(EntityImpl.java:138)

    at de.espirit.firstspirit.store.access.templatestore.SchemaImpl.postCommit(SchemaImpl.java:708)

    at de.espirit.or.impl.AbstractSession.postCommit(AbstractSession.java:1050)

    at de.espirit.or.impl.AbstractSession.commit(AbstractSession.java:593)

    at de.espirit.or.impl.AbstractSession.commit(AbstractSession.java:575)

    at de.materna.firstspirit.utils.gsa.GsaPermissionsTest.setupGroupsAndPermissions(GsaPermissionsTest.java:137)

    at de.materna.firstspirit.utils.gsa.GsaPermissionsTest.setup(GsaPermissionsTest.java:64)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

    at java.lang.reflect.Method.invoke(Method.java:606)

    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)

    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)

    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)

    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)

    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)

    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)

    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)

    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)

    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)

    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)

    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

Anbei der Code mit dem ich die Tabelle anlege:

schema.setLock(true, false);

        final de.espirit.or.schema.Schema orSchema = schema.getOrSchema();

        final EntityType entityType = orSchema.createEntityType("my_table");

        final SimpleAttribute<String> shortIdAttribute = entityType.createSimpleAttribute("my_column", String.class);

        shortIdAttribute.setRequired(true);

        shortIdAttribute.setSize(32);

        shortIdAttribute.setKey(true);

        schema.setOrSchema(orSchema);

        schema.getSession().commit();

        schema.save("saving schema", false);

        schema.setLock(false, false);

        final Session session = schema.getSession();

        final Entity entity = session.createEntity(entityType.getName());

        entity.put("my_column", "value");

        session.commit();

Beim letzten commit wird dann der Fehler geworfen.

0 Kudos
2 Replies
granseier
I'm new here

Ich habe nun rausgefunden was die NPE verursacht. Die Verwendung von "shortIdAttribute.setKey(true);" führt zu dem Fehlerbild. Doch leider kann ich nicht nachvollziehen, warum dann eine NPE geworfen wird und nicht eine aussagekräftige Fehlermeldung die darauf hinweist, dass fälschlicherweise ein Schlüsselattribut gesetzt wurde, obwohl die Implementierung dies an der Stelle nicht unterstützt.

0 Kudos

Mal ins Blaue geraten und ohne es geprüft zu haben

Die Methode setKey(boolean) ist nur von Relevanz, wenn du ein Schema aus einer externen Datenbank programmatisch erzeugen willst. Für interne, durch FS verwaltete Schemata ,wird der PK automatisch erzeugt und auf die FS_ID gemappt.

Welche DB verwendest du und in welche FirstSpirit Version?

Gruß,

Daniel

0 Kudos