EclipseLink如何处理XML文件?

EclipseLink如何处理XML文件?,xml,database,jakarta-ee,jpa,eclipselink,Xml,Database,Jakarta Ee,Jpa,Eclipselink,根据EclipseLink NoSQL文档,可以使用XML文件来持久化实体。[1] 根据该信息[2],强制性属性及其值为: "eclipselink.target-database"-->"org.eclipse.persistence.eis.adapters.xmlfile.XMLFilePlatform" "eclipselink.connection-spec"-->"org.eclipse.persistence.eis.adapters.xmlfile.XMLFile

根据EclipseLink NoSQL文档,可以使用XML文件来持久化实体。[1] 根据该信息[2],强制性属性及其值为:

"eclipselink.target-database"-->"org.eclipse.persistence.eis.adapters.xmlfile.XMLFilePlatform"

"eclipselink.connection-spec"-->"org.eclipse.persistence.eis.adapters.xmlfile.XMLFileEISConnectionSpec"

"eclipselink.nosql.property.directory"-->/PATH/TO/XML/DIRECTORY
我使用了EclipseLink MongoDB示例[3]中的代码(这对MongoDB很有效),并尝试以一种持久化到XML文件的方式对其进行编辑

persistence.xml:

<?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="asd" transaction-type="RESOURCE_LOCAL">
    <class>model.Order</class>
    <class>model.OrderLine</class>
    <class>model.Address</class>
    <class>model.Customer</class>
    <properties>
      <property name="eclipselink.target-database" value="org.eclipse.persistence.eis.adapters.xmlfile.XMLFilePlatform"/>
      <property name="eclipselink.nosql.connection-spec" value="org.eclipse.persistence.eis.adapters.xmlfile.XMLFileEISConnectionSpec"/>
      <property name="eclipselink.nosql.property.directory" value="/Users/dp/xmlfiles"/>
      <property name="eclipselink.logging.level" value="FINEST"/>
    </properties>
  </persistence-unit>
</persistence>
将抛出一个
异常
说明:

org.eclipse.persistence.eis.adapters.xmlfile.XMLFilePlatform不能强制转换为org.eclipse.persistence.internal.databaseaccess.DatabasePlatform

我不理解,因为此属性/值匹配取自EclipseLink文档。那么,使用XML文件来持久化EclipseLink中的实体,我遗漏了什么呢

整个日志:

[EL Finest]: jpa: 2014-01-16 15:31:47.764--ServerSession(962253337)--Thread(Thread[main,5,main])--Begin predeploying Persistence Unit asd; session file:/Users/dp/NetBeansProjects/XMLDSexampleNOTWEB /target/classes/_asd; state Initial; factoryCount 0
[EL Finest]: properties: 2014-01-16 15:31:47.781--ServerSession(962253337)--Thread(Thread[main,5,main])--property=eclipselink.orm.throw.exceptions; default value=true
[EL Finest]: properties: 2014-01-16 15:31:47.781--ServerSession(962253337)--Thread(Thread[main,5,main])--property=eclipselink.multitenant.tenants-share-emf; default value=true
[EL Finest]: properties: 2014-01-16 15:31:47.781--ServerSession(962253337)--Thread(Thread[main,5,main])--property=eclipselink.multitenant.tenants-share-cache; default value=false
[EL Finer]: metadata: 2014-01-16 15:31:47.799--ServerSession(962253337)--Thread(Thread[main,5,main])--Searching for default mapping file in file:/Users/dp/NetBeansProjects/XMLDSexampleNOTWEB%20/target/classes/ (There is no English translation for this message.)
[EL Finer]: metadata: 2014-01-16 15:31:47.803--ServerSession(962253337)--Thread(Thread[main,5,main])--Searching for default mapping file in file:/Users/dp/NetBeansProjects/XMLDSexampleNOTWEB%20/target/classes/ (There is no English translation for this message.)
[EL Config]: metadata: 2014-01-16 15:31:47.934--ServerSession(962253337)--Thread(Thread[main,5,main])--The access type for the persistent class [class model.Order] is set to [FIELD].
[EL Config]: metadata: 2014-01-16 15:31:47.969--ServerSession(962253337)--Thread(Thread[main,5,main])--The target class (reference) class for the element collection mapping element [field orderLines] is being defaulted to: class model.OrderLine.
[EL Config]: metadata: 2014-01-16 15:31:47.977--ServerSession(962253337)--Thread(Thread[main,5,main])--The target entity (reference) class for the many to one mapping element [field customer] is being defaulted to: class model.Customer.
[EL Config]: metadata: 2014-01-16 15:31:47.977--ServerSession(962253337)--Thread(Thread[main,5,main])--The access type for the persistent class [class model.Customer] is set to [FIELD].
[EL Config]: metadata: 2014-01-16 15:31:47.978--ServerSession(962253337)--Thread(Thread[main,5,main])--The access type for the persistent class [class model.OrderLine] is set to [FIELD].
[EL Config]: metadata: 2014-01-16 15:31:47.979--ServerSession(962253337)--Thread(Thread[main,5,main])--The access type for the persistent class [class model.Address] is set to [FIELD].
[EL Config]: metadata: 2014-01-16 15:31:47.98--ServerSession(962253337)--Thread(Thread[main,5,main])--The alias name for the entity class [class model.Order] is being defaulted to: Order.
[EL Config]: metadata: 2014-01-16 15:31:48.016--ServerSession(962253337)--Thread(Thread[main,5,main])--The column name for element [description] is being defaulted to: DESCRIPTION.
[EL Config]: metadata: 2014-01-16 15:31:48.016--ServerSession(962253337)--Thread(Thread[main,5,main])--The column name for element [description] is being defaulted to: DESCRIPTION.
[EL Config]: metadata: 2014-01-16 15:31:48.017--ServerSession(962253337)--Thread(Thread[main,5,main])--The column name for element [lineNumber] is being defaulted to: LINENUMBER.
[EL Config]: metadata: 2014-01-16 15:31:48.017--ServerSession(962253337)--Thread(Thread[main,5,main])--The column name for element [cost] is being defaulted to: COST.
[EL Config]: metadata: 2014-01-16 15:31:48.018--ServerSession(962253337)--Thread(Thread[main,5,main])--The column name for element [postalCode] is being defaulted to: POSTALCODE.
[EL Config]: metadata: 2014-01-16 15:31:48.018--ServerSession(962253337)--Thread(Thread[main,5,main])--The column name for element [street] is being defaulted to: STREET.
[EL Config]: metadata: 2014-01-16 15:31:48.018--ServerSession(962253337)--Thread(Thread[main,5,main])--The column name for element [province] is being defaulted to: PROVINCE.
[EL Config]: metadata: 2014-01-16 15:31:48.019--ServerSession(962253337)--Thread(Thread[main,5,main])--The column name for element [city] is being defaulted to: CITY.
[EL Config]: metadata: 2014-01-16 15:31:48.019--ServerSession(962253337)--Thread(Thread[main,5,main])--The column name for element [country] is being defaulted to: COUNTRY.
[EL Config]: metadata: 2014-01-16 15:31:48.02--ServerSession(962253337)--Thread(Thread[main,5,main])--The alias name for the entity class [class model.Customer] is being defaulted to: Customer.
[EL Config]: metadata: 2014-01-16 15:31:48.02--ServerSession(962253337)--Thread(Thread[main,5,main])--The column name for element [name] is being defaulted to: NAME.
[EL Config]: metadata: 2014-01-16 15:31:48.03--ServerSession(962253337)--Thread(Thread[main,5,main])--The primary key column name for the mapping element [field customer] is being defaulted to: _id.
[EL Config]: metadata: 2014-01-16 15:31:48.03--ServerSession(962253337)--Thread(Thread[main,5,main])--The foreign key column name for the mapping element [customer] is being defaulted to: CUSTOMER__id.
[EL Config]: metadata: 2014-01-16 15:31:48.041--ServerSession(962253337)--Thread(Thread[main,5,main])--The column name for element [orderLines] is being defaulted to: ORDERLINES.
[EL Config]: metadata: 2014-01-16 15:31:48.041--ServerSession(962253337)--Thread(Thread[main,5,main])--The column name for element [deliveryAddress] is being defaulted to: DELIVERYADDRESS.
[EL Finest]: jpa: 2014-01-16 15:31:48.042--ServerSession(962253337)--Thread(Thread[main,5,main])--End predeploying Persistence Unit asd; session file:/Users/dp/NetBeansProjects/XMLDSexampleNOTWEB /target/classes/_asd; state Predeployed; factoryCount 0
[EL Finer]: weaver: 2014-01-16 15:31:48.042--Thread(Thread[main,5,main])--JavaSECMPInitializer - transformer is null.
[EL Finest]: jpa: 2014-01-16 15:31:48.042--ServerSession(962253337)--Thread(Thread[main,5,main])--Begin predeploying Persistence Unit asd; session file:/Users/dp/NetBeansProjects/XMLDSexampleNOTWEB /target/classes/_asd; state Predeployed; factoryCount 0
[EL Finest]: jpa: 2014-01-16 15:31:48.042--ServerSession(962253337)--Thread(Thread[main,5,main])--End predeploying Persistence Unit asd; session file:/Users/dp/NetBeansProjects/XMLDSexampleNOTWEB /target/classes/_asd; state Predeployed; factoryCount 1

Testing persist() of orders and customers.

[EL Finest]: jpa: 2014-01-16 15:31:48.046--ServerSession(962253337)--Thread(Thread[main,5,main])--Begin deploying Persistence Unit asd; session file:/Users/dp/NetBeansProjects/XMLDSexampleNOTWEB /target/classes/_asd; state Predeployed; factoryCount 1
[EL Finer]: 2014-01-16 15:31:48.053--ServerSession(962253337)--Thread(Thread[main,5,main])--Could not initialize Validation Factory. Encountered following exception: java.lang.NoClassDefFoundError: javax/validation/Validation
[EL Finest]: properties: 2014-01-16 15:31:48.056--ServerSession(962253337)--Thread(Thread[main,5,main])--property=eclipselink.logging.level; value=FINEST; translated value=FINEST
[EL Finest]: properties: 2014-01-16 15:31:48.056--ServerSession(962253337)--Thread(Thread[main,5,main])--property=eclipselink.logging.level; value=FINEST; translated value=FINEST
[EL Finest]: properties: 2014-01-16 15:31:48.056--ServerSession(962253337)--Thread(Thread[main,5,main])--property=eclipselink.target-database; value=org.eclipse.persistence.eis.adapters.xmlfile.XMLFilePlatform
[EL Finest]: properties: 2014-01-16 15:31:48.14--ServerSession(962253337)--Thread(Thread[main,5,main])--property=eclipselink.nosql.connection-spec; value=org.eclipse.persistence.eis.adapters.xmlfile.XMLFileEISConnectionSpec
[EL Info]: 2014-01-16 15:31:48.142--ServerSession(962253337)--Thread(Thread[main,5,main])--EclipseLink, version: Eclipse Persistence Services - 2.5.1.v20130918-f2b9fc5
[EL Config]: connection: 2014-01-16 15:31:48.144--ServerSession(962253337)--Connection(1165994758)--Thread(Thread[main,5,main])--connecting(EISLogin(
    platform=> XMLFilePlatform
    user name=> ""
    XMLFileEISConnectionSpec()
))
[EL Config]: connection: 2014-01-16 15:31:48.149--ServerSession(962253337)--Connection(1087133350)--Thread(Thread[main,5,main])--Connected: 
    User: 
    Database: EclipseLink XML File JCA Adapter  Version: 2.5.1
[EL Finest]: connection: 2014-01-16 15:31:48.149--ServerSession(962253337)--Connection(1087133350)--Thread(Thread[main,5,main])--Connection acquired from connection pool [default].
[EL Finest]: connection: 2014-01-16 15:31:48.149--ServerSession(962253337)--Connection(1087133350)--Thread(Thread[main,5,main])--Connection released to connection pool [default].
[EL Config]: connection: 2014-01-16 15:31:48.153--ServerSession(962253337)--Connection(1087133350)--Thread(Thread[main,5,main])--disconnect
[EL Finer]: cache: 2014-01-16 15:31:48.153--ServerSession(962253337)--Thread(Thread[main,5,main])--initialize identitymaps
[EL Info]: connection: 2014-01-16 15:31:48.154--ServerSession(962253337)--Thread(Thread[main,5,main])--file:/Users/dp/NetBeansProjects/XMLDSexampleNOTWEB /target/classes/_asd logout successful
[EL Config]: connection: 2014-01-16 15:31:48.154--ServerSession(962253337)--Connection(1165994758)--Thread(Thread[main,5,main])--disconnect
[EL Severe]: ejb: 2014-01-16 15:31:48.157--ServerSession(962253337)--Thread(Thread[main,5,main])--java.lang.ClassCastException: org.eclipse.persistence.eis.adapters.xmlfile.XMLFilePlatform cannot be cast to org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    at org.eclipse.persistence.sequencing.TableSequence.onConnect(TableSequence.java:168)
    at org.eclipse.persistence.sequencing.Sequence.onConnect(Sequence.java:270)
    at org.eclipse.persistence.sequencing.NativeSequence.onConnect(NativeSequence.java:185)
    at org.eclipse.persistence.sequencing.Sequence.onConnect(Sequence.java:270)
    at org.eclipse.persistence.internal.sequencing.SequencingManager.onConnectSequences(SequencingManager.java:927)
    at org.eclipse.persistence.internal.sequencing.SequencingManager.onConnectInternal(SequencingManager.java:747)
    at org.eclipse.persistence.internal.sequencing.SequencingManager.onConnect(SequencingManager.java:700)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeSequencing(DatabaseSessionImpl.java:282)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:636)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:632)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:568)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.postConnectDatasource(DatabaseSessionImpl.java:799)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.login(DatabaseSessionImpl.java:756)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:241)
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:685)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:204)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:304)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:336)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:302)
    at example.Test.testPersist(Test.java:62)
    at example.Test.main(Test.java:52)

[EL Finest]: jpa: 2014-01-16 15:31:48.158--ServerSession(962253337)--Thread(Thread[main,5,main])--End deploying Persistence Unit asd; session file:/Users/dp/NetBeansProjects/XMLDSexampleNOTWEB /target/classes/_asd; state DeployFailed; factoryCount 1
Exception in thread "main" javax.persistence.PersistenceException: Exception [EclipseLink-28019] (Eclipse Persistence Services - 2.5.1.v20130918-f2b9fc5): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Deployment of PersistenceUnit [asd] failed. Close all factories for this PersistenceUnit.
Internal Exception: java.lang.ClassCastException: org.eclipse.persistence.eis.adapters.xmlfile.XMLFilePlatform cannot be cast to org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.createDeployFailedPersistenceException(EntityManagerSetupImpl.java:820)
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:760)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:204)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:304)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:336)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:302)
    at example.Test.testPersist(Test.java:62)
    at example.Test.main(Test.java:52)
Caused by: Exception [EclipseLink-28019] (Eclipse Persistence Services - 2.5.1.v20130918-f2b9fc5): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Deployment of PersistenceUnit [asd] failed. Close all factories for this PersistenceUnit.
Internal Exception: java.lang.ClassCastException: org.eclipse.persistence.eis.adapters.xmlfile.XMLFilePlatform cannot be cast to org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    at org.eclipse.persistence.exceptions.EntityManagerSetupException.deployFailed(EntityManagerSetupException.java:238)
    ... 8 more
Caused by: java.lang.ClassCastException: org.eclipse.persistence.eis.adapters.xmlfile.XMLFilePlatform cannot be cast to org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    at org.eclipse.persistence.sequencing.TableSequence.onConnect(TableSequence.java:168)
    at org.eclipse.persistence.sequencing.Sequence.onConnect(Sequence.java:270)
    at org.eclipse.persistence.sequencing.NativeSequence.onConnect(NativeSequence.java:185)
    at org.eclipse.persistence.sequencing.Sequence.onConnect(Sequence.java:270)
    at org.eclipse.persistence.internal.sequencing.SequencingManager.onConnectSequences(SequencingManager.java:927)
    at org.eclipse.persistence.internal.sequencing.SequencingManager.onConnectInternal(SequencingManager.java:747)
    at org.eclipse.persistence.internal.sequencing.SequencingManager.onConnect(SequencingManager.java:700)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeSequencing(DatabaseSessionImpl.java:282)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:636)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:632)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:568)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.postConnectDatasource(DatabaseSessionImpl.java:799)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.login(DatabaseSessionImpl.java:756)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:241)
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:685)
    ... 6 more
[1]

[2]


[3] 我在实现mongodb持久性时遇到了相同的异常:

我的问题是我使用的价值创造策略,mongo不支持

如果您让它有:@GeneratedValue(没有策略规范),它将使用默认策略,这可能会解决您的问题

希望这会有帮助