【发布时间】:2016-05-05 09:49:31
【问题描述】:
我是 JPA 的新手,我很迷茫。
我在 netbeans 中创建了一个企业项目来做一些测试。使用向导创建了这个持久性单元。我添加了一个可以正常工作的 JNDI 连接,并且已经过测试:
<?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="persistencia" transaction-type="JTA">
<jta-data-source>jdbc/nuevaConexion</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
后来,我创建了一个带有一些测试变量的示例实体来看看它是如何工作的:
@Entity
public class Entity1 implements Serializable {
private static long serialVersionUID = 1L;
private String nombre;
private int numero;
/**
* @return the serialVersionUID
*/
public static long getSerialVersionUID() {
return serialVersionUID;
}
/**
* @param aSerialVersionUID the serialVersionUID to set
*/
public static void setSerialVersionUID(long aSerialVersionUID) {
serialVersionUID = aSerialVersionUID;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
// setters & getters
然后,尝试让服务 CreateEntity1 试一试,并尝试通过调用它在 DB 上创建一个新元素:
public class CreateEntity1 {
public static void main( String[ ] args ) {
EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
EntityManager entitymanager = emfactory.createEntityManager( );
entitymanager.getTransaction( ).begin( );
Entity1 ent = new Entity1( );
ent.setId(1);
ent.setNombre("Mi entidad");
ent.setNumero(123);
entitymanager.persist( ent );
entitymanager.getTransaction( ).commit( );
entitymanager.close( );
emfactory.close( );
}
}
...但它不起作用。我收到以下错误:
线程“主”javax.persistence.PersistenceException 中的异常:否 EntityManager 的持久性提供程序名为 Eclipselink_JPA,位于 javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85) 在 javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) 在 service.CreateEntity1.main(CreateEntity1.java:22) C:\Users\hp\AppData\Local\NetBeans\Cache\8.1\executor-sn-ps\run.xml:53: Java 返回:1 BUILD FAILED(总时间:0 秒)
我做错了什么?
编辑:我将持久性提供程序的名称更改为好的名称,但现在我遇到了一堆严重的错误。
编辑 2:将所有内容更改为休眠类型。仍然得到一个巨大的错误:
线程“主”本地异常堆栈中的异常:异常 [EclipseLink-30009](Eclipse 持久性服务 - 2.6.1.v20150605-31e8258):org.eclipse.persistence.exceptions.PersistenceUnitLoadingException 异常描述:尝试加载时抛出异常 url 处的持久性单元: 文件:/C:/Users/hp/Documents/NetBeansProjects/PruebasJ2EE/PruebasJ2EE-ejb/build/classes/ 内部异常:异常 [EclipseLink-30004](Eclipse 持久性 服务 - 2.6.1.v20150605-31e8258): org.eclipse.persistence.exceptions.PersistenceUnitLoadingException 异常描述:处理时抛出异常 来自 URL 的 persistence.xml: 文件:/C:/Users/hp/Documents/NetBeansProjects/PruebasJ2EE/PruebasJ2EE-ejb/build/classes/ 内部异常:(1. El destino de la instrucción de procesamiento que 重合 con "[xX][mM][lL]" no está permitido.) at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionLoadingFromUrl(PersistenceUnitLoadingException.java:100) 在 org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.processPersistenceArchive(PersistenceUnitProcessor.java:616) 在 org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.getPersistenceUnits(PersistenceUnitProcessor.java:500) 在 org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.findPersistenceUnitInfoInArchive(JPAInitializer.java:178) 在 org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.findPersistenceUnitInfoInArchives(JPAInitializer.java:160) 在 org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.findPersistenceUnitInfo(JPAInitializer.java:141) 在 org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:188) 在 javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) 在 javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) 在 service.CreateEntity1.main(CreateEntity1.java:22) 引起: 异常 [EclipseLink-30004](Eclipse 持久性服务 - 2.6.1.v20150605-31e8258):org.eclipse.persistence.exceptions.PersistenceUnitLoadingException 异常描述:处理时抛出异常 来自 URL 的 persistence.xml: 文件:/C:/Users/hp/Documents/NetBeansProjects/PruebasJ2EE/PruebasJ2EE-ejb/build/classes/ 内部异常:(1. El destino de la instrucción de procesamiento que 重合 con "[xX][mM][lL]" no está permitido.) at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionProcessingPersistenceXML(PersistenceUnitLoadingException.java:118) 在 org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.processPersistenceXML(PersistenceUnitProcessor.java:665) 在 org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.processPersistenceArchive(PersistenceUnitProcessor.java:614) ... 8 更多原因:(1. El destino de la instrucción de procesamiento que 重合 con "[xX][mM][lL]" no está permitido.) 在 org.eclipse.persistence.internal.jpa.deployment.xml.parser.XMLExceptionHandler.error(XMLExceptionHandler.java:28) 在 org.eclipse.persistence.internal.jpa.deployment.xml.parser.XMLExceptionHandler.fatalError(XMLExceptionHandler.java:34) 在 com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:180) 在 com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:441) 在 com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368) 在 com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1436) 在 com.sun.org.apache.xerces.internal.impl.XMLScanner.scanPIData(XMLScanner.java:723) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanPIData(XMLDocumentFragmentScannerImpl.java:1018) 在 com.sun.org.apache.xerces.internal.impl.XMLScanner.scanPI(XMLScanner.java:691) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:912) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606) 在 com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) 在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848) 在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777) 在 com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) 在 com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) 在 com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:649) 在 org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.processPersistenceXML(PersistenceUnitProcessor.java:655) ... 9 更多 C:\Users\hp\AppData\Local\NetBeans\Cache\8.1\executor-sn-ps\run.xml:53: Java 返回:1 BUILD FAILED(总时间:0 秒)
【问题讨论】:
-
试试
Persistence.createEntityManagerFactory("persistencia" );,你必须指定正确的持久化单元名称。
标签: jpa eclipselink