org.apache.openjpa.persistence.RollbackException: near "FOR ""错误-6ren"> org.apache.openjpa.persistence.RollbackException: near "FOR ""错误-我在使用 SQLite 的 JPA 中遇到此错误,我不知道为什么会出现这种情况,有帮助吗? 我的 persistence.xml: org.apache.openjpa.-6ren">
gpt4 book ai didi

java - "Exception in thread "主要 " org.apache.openjpa.persistence.RollbackException: near "FOR ""错误

转载 作者:行者123 更新时间:2023-12-01 05:41:19 27 4
gpt4 key购买 nike

我在使用 SQLite 的 JPA 中遇到此错误,我不知道为什么会出现这种情况,有帮助吗?

我的 persistence.xml:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="geronimo" transaction-type="RESOURCE_LOCAL">
<provider>
org.apache.openjpa.persistence.PersistenceProviderImpl
</provider>
<class>label.entities.Discography</class>
<properties>
<property name="openjpa.ConnectionURL" value="jdbc:sqlite:C:\\sqlitedb\\repo.db" />
<property name="openjpa.ConnectionDriverName" value="org.sqlite.JDBC" />
<property name="openjpa.ConnectionUserName" value="root" />
<property name="openjpa.ConnectionPassword" value="" />
<property name="openjpa.Log" value="SQL=TRACE" />
</properties>
</persistence-unit>

我的 JPA 类(class):

package label.implementations;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

import label.entities.Discography;



public class Disconfigurator {
public static void main(String[] args) {
String persistenceUnit = "geronimo";
EntityManagerFactory eFactory = Persistence.createEntityManagerFactory(persistenceUnit);
EntityManager eManager = eFactory.createEntityManager();
EntityTransaction eTransaction = eManager.getTransaction();
eTransaction.begin();
Discography discography = new Discography();
discography.setArtist("Kings Of Leon");
discography.setSong("Radioactive");
eManager.persist(discography);
eTransaction.commit();
eManager.close();
eFactory.close();

}
}

我的实体类:

package label.entities;

import javax.persistence.Column;
import javax.persistence.Entity;

@Entity(name="discography")
public class Discography {

@Column(name="artist",length=1000,nullable=true)
String artist;
@Column(name="song",length=1000,nullable=true)
String song;

public String getArtist() {
return artist;
}

public void setArtist(String artist) {
this.artist = artist;
}

public String getSong() {
return song;
}

public void setSong(String song) {
this.song = song;
}

}

错误跟踪:

    47  geronimo  INFO   [main] openjpa.Runtime - Starting OpenJPA 1.2.1
2500 geronimo WARN [main] openjpa.jdbc.JDBC - Your database configuration was not recognized as a supported OpenJPA database. The generic dictionary will be used, which may result in limited functionality. This behavior can be overridden by specifying the appropriate dictionary class in the "openjpa.jdbc.DBDictionary" property of the OpenJPA configuration.
2500 geronimo INFO [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.DBDictionary" (SQLite 3.6.3 ,SQLiteJDBC native).
2500 geronimo WARN [main] openjpa.jdbc.JDBC - This database dictionary "class org.apache.openjpa.jdbc.sql.DBDictionary" is not officially supported by OpenJPA.
3406 geronimo INFO [main] openjpa.Enhance - Creating subclass for "[class label.entities.Discography]". This means that your application will be less efficient and will consume more memory than it would if you ran the OpenJPA enhancer. Additionally, lazy loading will not be available for one-to-one and many-to-one persistent attributes in types using field access; they will be loaded eagerly instead.
Exception in thread "main" <openjpa-1.2.1-r752877:753278 fatal store error> org.apache.openjpa.persistence.RollbackException: near "FOR": syntax error {SELECT SEQUENCE_VALUE FROM OPENJPA_SEQUENCE_TABLE WHERE ID = ? FOR UPDATE} [code=0, state=null]
at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:523)
at label.implementations.Disconfigurator.main(Disconfigurator.java:23)
Caused by: <openjpa-1.2.1-r752877:753278 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: near "FOR": syntax error {SELECT SEQUENCE_VALUE FROM OPENJPA_SEQUENCE_TABLE WHERE ID = ? FOR UPDATE} [code=0, state=null]
at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4232)
at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4197)
at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:102)
at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:88)
at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:64)
at org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.next(AbstractJDBCSeq.java:65)
at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignObjectId(JDBCStoreManager.java:752)
at org.apache.openjpa.kernel.DelegatingStoreManager.assignObjectId(DelegatingStoreManager.java:134)
at org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:520)
at org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:2824)
at org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:39)
at org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:960)
at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1948)
at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1908)
at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1826)
at org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:81)
at org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1350)
at org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:877)
at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:512)
... 1 more
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: near "FOR": syntax error {SELECT SEQUENCE_VALUE FROM OPENJPA_SEQUENCE_TABLE WHERE ID = ? FOR UPDATE} [code=0, state=null]
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:201)
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$000(LoggingConnectionDecorator.java:57)
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection.prepareStatement(LoggingConnectionDecorator.java:228)
at org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:164)
at org.apache.openjpa.lib.jdbc.ConfiguringConnectionDecorator$ConfiguringConnection.prepareStatement(ConfiguringConnectionDecorator.java:140)
at org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:153)
at org.apache.openjpa.jdbc.sql.SQLBuffer.prepareStatement(SQLBuffer.java:511)
at org.apache.openjpa.jdbc.sql.SQLBuffer.prepareStatement(SQLBuffer.java:471)
at org.apache.openjpa.jdbc.sql.SQLBuffer.prepareStatement(SQLBuffer.java:481)
at org.apache.openjpa.jdbc.sql.SQLBuffer.prepareStatement(SQLBuffer.java:460)
at org.apache.openjpa.jdbc.kernel.TableJDBCSeq.prepareStatement(TableJDBCSeq.java:756)
at org.apache.openjpa.jdbc.kernel.TableJDBCSeq.getSequence(TableJDBCSeq.java:511)
at org.apache.openjpa.jdbc.kernel.TableJDBCSeq.setSequence(TableJDBCSeq.java:554)
at org.apache.openjpa.jdbc.kernel.TableJDBCSeq$AllocateSequenceRunnable.run(TableJDBCSeq.java:824)
at org.apache.openjpa.jdbc.kernel.TableJDBCSeq.allocateSequence(TableJDBCSeq.java:424)
at org.apache.openjpa.jdbc.kernel.TableJDBCSeq.nextInternal(TableJDBCSeq.java:290)
at org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.next(AbstractJDBCSeq.java:60)
... 14 more

最佳答案

OpenJPA 不支持 SQLite 并且生成不正确的 SQL。

正是 FOR UPDATE 子句导致了您所看到的问题。您可以通过设置 OpenJPA 的 DBDictionary 配置属性来解决这个问题:

        <property name="openjpa.jdbc.DBDictionary" value="(forUpdateClause=)" />

这只会让您绕过立即异常,并且可能还需要设置其他属性。如果您发现必须进行很多这样的更改,您可能需要编写 own DBDictionary for SQLite

关于java - "Exception in thread "主要 "<openjpa-1.2.1-r752877:753278 fatal store error> org.apache.openjpa.persistence.RollbackException: near "FOR ""错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7116410/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com