开发者

"org.apache.openjpa.persistence.PersistenceException: null" error

I've been trying to make a simple class in Java run with JPA to no avail. Help? The title is the error I'm getting.

I've been trying to make a simple class in Java run with JPA to no avail. Help? The title is the error I'm getting.

My 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>

My 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();

}
}

My Entity class:

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

}

The error trace:

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.Persisten开发者_高级运维ceException: 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


You're trying to persist the Transaction and not your entity object.

This is what your code SHOULD look like --

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();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜