2016-07-01 8 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") 

Мне кажется, что автогенерация идентификатора не удалась. Класс объекта был создан соперничает 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; 

ответ

0

По умолчанию EclipseLink пытается автоматически определить основную базу данных и генерировать SQL заявление с использованием соответствующего SQL диалекта. Это, видимо, не работает для вас, потому что оператор SQL для получения последнего установленного значения удостоверения не распознается UCanAccess.

Вы можете попробовать добавить директиву target-database в конфигурацию EclipseLink, указав SQLServer, чтобы получить рабочий SQL-запрос (SELECT @@IDENTITY), чтобы получить последнее созданное значение ID. Однако имейте в виду, что существуют существенные различия между 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

Я столкнулся с ошибкой «Вызов: SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1« всякий раз, когда я хочу попробовать добавить новую запись в базу данных доступа Microsoft с вставкой API java persistence API (jpa), не удался. после добавления ниже строки в файле persistence.xml теперь работает нормально <свойство name = "eclipselink.target-database" value = "HSQL" /> –