簡體   English   中英

使用EclipseLink和UCanAccess進行持久性時出錯

[英]Error with persistence using EclipseLink and UCanAccess

我正在努力開發一個應用程序,因為運動的原因。 我使用MSAccess 2010作為數據庫,UCanAccess(3.06)作為驅動程序,EclipseLink 2.1作為實體框架。

我被困在向數據庫添加新記錄。 這里的錯誤代碼:

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")

在我看來,id的自動生成失敗了。 實體類是通過Netbeans生成的,如下所示:

@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;

默認情況下,EclipseLink嘗試使用適當的SQL方言自動檢測基礎數據庫並生成SQL語句。 這顯然不適合您,因為UCanAccess無法識別用於檢索上次創建的標識值的SQL語句。

您可以嘗試向EclipseLink配置添加target-database指令,指定SQLServer以嘗試獲取有效的SQL語句( SELECT @@IDENTITY )以檢索上次創建的ID值。 但是,請記住,T-SQL和Access SQL之間存在顯着差異,因此您可能會繼續遇到EclipseLink和UCanAccess之間的其他兼容性問題。

在了解上述答案之前,我也面臨着在訪問數據庫中插入新記錄的同樣問題,感謝Gord Thompson先生為我提供了一個很好的解決方案,而且它也在起作用。

我剛剛在persistence.xml文件中添加了一行代碼。

property name =“eclipselink.target-database”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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM