- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Labels:
-
Developers
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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

