出于锻炼原因,我正在尝试开发一款应用程序。我使用 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/