java - 使用 EclipseLink 和 UCanAccess 的持久性错误

标签 java ms-access-2010 eclipselink ucanaccess

出于锻炼原因,我正在尝试开发一款应用程序。我使用 MSAccess 2010 作为数据库,以 UCanAccess (3.06) 作为驱动程序,以 EclipseLink 2.1 作为 Entity Framework 。

我陷入了向数据库添加新记录的困境。这里是错误代码:

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 语句。

您可以尝试添加 target-database向您的 EclipseLink 配置指定 SQLServer 的指令,以尝试获取有效的 SQL 语句 (SELECT @@IDENTITY) 来检索最后创建的 ID 值。但是,请记住,T-SQL 和 Access SQL 之间存在显着差异,因此您可能会继续遇到 EclipseLink 和 UCanAccess 之间的其他兼容性问题。

关于java - 使用 EclipseLink 和 UCanAccess 的持久性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38142235/

相关文章:

java - Websocket 仅限 Web 应用程序?

java - 错误 : 'cannot find symbol class GetTokenResult' after adding latest firebase-messaging dependency

ms-access - VBA Access 中引用表单的差异

ms-access-2010 - Access 2010 计算字段 - 表需要比静态字段更多的空间

java - 组织.postgresql.util.PSQLException : ERROR: relation "sequence" does not exist

java - 只有当查询包含 FIRST_ROWS 或 ROWNUM 限制时,ResultSet.next 才会非常慢

java - 您如何从 Wicket 的下拉列表中获取值?

java - 如何在 Android 应用程序中以编程方式创建 Telegram 贴纸

mysql - SQL - 理解 'JOIN' 语法、顺序

java - 我可以在 MOXy DynamicEntities 上设置空的嵌套值吗?