java - "org.apache.openjpa.persistence.PersistenceException: null"错误

标签 java jpa

我一直在尝试在 Java 中创建一个与 JPA 一起运行的简单类,但没有成功。帮助? 标题是我遇到的错误。

我一直在尝试在 Java 中创建一个与 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="" />
        <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;
}

}

错误跟踪:

31  geronimo  INFO   [main] openjpa.Runtime - Starting OpenJPA 1.2.1
Exception in thread "main" <openjpa-1.2.1-r752877:753278 nonfatal general error>                org.apache.openjpa.persistence.PersistenceException: null
    at     org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:196)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
at label.implementations.Disconfigurator.main(Disconfigurator.java:16)
Caused by: java.lang.NullPointerException
at org.sqlite.JDBC.connect(JDBC.java:63)
at org.apache.openjpa.jdbc.schema.SimpleDriverDataSource.getConnection(SimpleDriverDataSource.java:81)
at org.apache.openjpa.jdbc.schema.SimpleDriverDataSource.getConnection(SimpleDriverDataSource.java:60)
at org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:106)
at org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:87)
at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:91)
at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:562)
at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1265)
at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:505)
at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:430)
at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:103)
at org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68)
at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
at org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:863)
at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:854)
at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:638)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:183)
... 5 more

最佳答案

您正在尝试保留事务而不是实体对象。

这就是你的代码应该是什么样的——

EntityManagerFactory eFactory = Persistence.createEntityManagerFactory("geronimo");
EntityManager eManager = eFactory.createEntityManager();
EntityTransaction eTransaction = eManager.getTransaction();
//eManager.persist(eTransaction); <--- DO NOT DO THIS
eTransaction.begin();
Discography discography = new Discography();
discography.setArtist("Kings Of Leon");
discography.setSong("Radioactive");
eManager.persist(discography); //  DO THIS INSTEAD. PERSIST THE ENTITY 
eTransaction.commit();
eManager.close();
eFactory.close();

关于java - "org.apache.openjpa.persistence.PersistenceException: null"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7115636/

相关文章:

java - 如何在 Android 中获取 LinkedIn 联系人或好友列表?

java - 在更改时自动编译 JasperReports

java - 在java中获取UTF8字符集而不是ASCII

java - 创建 EntityManagerFactory 时出现 ArrayIndexOutOfBoundsException

java - 如果找不到实体,则为 JPA 默认值

jpa - JPQL 查询的返回类型

java - Netbeans 插入代码

java - 编辑 JTable 行

java - 使用 CriteriaBuilder 的 JPA 计数(*)。如何使用 CriteriaBuilder 检索 count(*) 列

java - NotFoundAction.EXCEPTION 不抛出异常