2016-07-01 17 views
1

Ich versuche eine App aus Trainingsgründen zu entwickeln. Ich verwende MSAccess 2010 als Datenbank mit UCanAccess (3.06) als Treiber und EclipseLink 2.1 als Entitätsframework.Fehler bei der Persistenz mit EclipseLink und UCanAccess

Ich bin beim Hinzufügen neuer Datensätze in der Datenbank fest. Hier der Fehlercode:

Internal Exception: net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.6 user lacks privilege or object not found: IDENTITY_VAL_LOCAL 
Error Code: -5501 
Call: SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1 
Query: ValueReadQuery(name="SEQ_GEN_IDENTITY" sql="SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1") 

Es scheint mir, dass die Autogenerate der ID fehlschlägt. Die Entity-Klasse generiert wurde vie Netbeans und sieht wie folgt aus:

@Transient 
private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); 

private static final long serialVersionUID = 1L; 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Basic(optional = false) 
@Column(name = "ID") 
private Integer id; 

Antwort

0

versucht standardmäßig, Eclipse automatisch die zugrunde liegende Datenbank zu erfassen und SQL-Anweisungen unter Verwendung der entsprechenden SQL-Dialekt zu erzeugen. Das funktioniert anscheinend nicht, da die SQL-Anweisung zum Abrufen des zuletzt erstellten Identitätswerts von UCanAccess nicht erkannt wird.

Sie könnten versuchen, eine target-database Direktive zu Ihrer EclipseLink-Konfiguration hinzuzufügen SQLServer in dem Versuch, eine funktionierende SQL-Anweisung (SELECT @@IDENTITY) zu erhalten, um den zuletzt erstellten ID-Wert abzurufen. Beachten Sie jedoch, dass zwischen T-SQL und Access SQL erhebliche Unterschiede bestehen, sodass Sie wahrscheinlich weiterhin auf Kompatibilitätsprobleme zwischen EclipseLink und UCanAccess stoßen werden.

0

vor oben Antwort zu wissen, war ich auch gleiche Problem für das Einfügen neuer Rekord in Access-Datenbank, Dank Herr Gord Thompson mit Blick auf eine große Lösung für mich zu geben, und es ist zu arbeiten.

ich habe nur eine Zeile in meiner persistence.xml Datei hinzugefügt ..

property name = "eclipselink.target-Datenbank" value = "HSQL"

<?xml version="1.0" encoding="UTF-8"?> 
    <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
     <persistence-unit name="OnePU" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <class>design_frames.One</class> 
     <properties> 
      <property name="javax.persistence.jdbc.url" value="jdbc:ucanaccess://C:\One\One.accdb"/> 
      <property name="javax.persistence.jdbc.user" value=""/> 
      <property name="javax.persistence.jdbc.driver" value="net.ucanaccess.jdbc.UcanaccessDriver"/> 
      <property name="javax.persistence.jdbc.password" value=""/> 
      <property name="eclipselink.target-database" value="HSQL"/> 
     </properties> 
     </persistence-unit> 
    </persistence> 
+0

Willkommen bei SO. Und warum hast du diese Zeile hinzugefügt? –

+0

Ich war Fehler "Aufruf: SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1" immer wenn ich versuchen möchte, neuen Datensatz in Microsoft Access-Datenbank mit Java-Persistenz-API (jpa) einfügen war nicht erfolgreich. nach dem Hinzufügen unter Zeile in persistence.xml Datei jetzt funktioniert es gut