2016-07-01 3 views
1

연습 문제로 앱을 개발하려고합니다. MSAccess 2010을 UCanAccess (3.06)를 드라이버로 사용하고 EclipseLink 2.1을 엔터티 프레임 워크로 사용하고 있습니다.EclipseLink 및 UCanAccess를 사용하여 지속성에 오류가 있습니다.

데이터베이스에 새 레코드를 추가 할 필요가 없습니다. 여기에 오류 코드 :

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의 자동 생성이 실패한 것 같습니다. 생성 된 엔티티 클래스는 다음과 같이 넷빈즈 경쟁과 같습니다 기본적으로

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

답변

0

은 EclipseLink가 자동으로 적절한 SQL 언어를 사용하여 SQL 문을 기본 데이터베이스를 감지하고 생성을 시도합니다. 마지막으로 생성 된 ID 값을 검색하는 SQL 문이 UCanAccess에서 인식되지 않기 때문에 분명히 작동하지 않습니다.

SQLServer을 지정하는 EclipseLink 구성에 target-database 지정 문을 추가하여 마지막으로 작성된 ID 값을 검색하는 작업 SQL 문 (SELECT @@IDENTITY)을 얻을 수 있습니다. 그러나 T-SQL과 Access SQL 간에는 상당한 차이가 있으므로 EclipseLink와 UCanAccess간에 다른 호환성 문제가 계속 발생할 수 있습니다.

0

대답보다 아는 전에 나는 또한 나를 위해 을 훌륭한 솔루션을 제공하기 위해, 액세스 데이터베이스에 씨 고드 톰슨에 덕분에 새 레코드를 삽입하는 동일한 문제에 직면하고 너무 노력하고 있습니다. 난 그냥 내 persistence.xml 파일에 한 줄을 추가 한

..

속성 이름 = "eclipselink.target 데이터베이스"값 = "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

에 오신 것을 환영합니다 SO합니다. 그리고 왜이 라인을 추가 했습니까? –

+0

언제든지 Microsoft 저장 데이터베이스 에 새 레코드를 추가하려고 할 때마다 "호출 : SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1" 오류가 발생했습니다. Java 지속성 API (jpa) 삽입이 성공하지 못했습니다. persistence.xml 파일에서 아래 라인을 추가 한 후 이제는 잘 작동합니다.