2012-10-08 27 views
8

我的问题是几乎回答了这一主题:的EclipseLink复合持久性单元不<jar-file>

EclipseLink, EntityManager with two persistence units needed

但是我用一个persistence.xml文件申报3个持久化单元,它工作得很好。但是现在我需要一个复合持久单元,我不知道也不想为每个持久单元构建单独的jar。有没有办法做到这一点,没有<jar-file>标签。如果不是,任何人都可以给我一个如何使用单个持久性单元创建jar文件的例子吗?

编辑1: 这个配置我结束了,但它仍然无法正常工作 - 我得到的是这样的输出,当我尝试使用em.createNamedQuery(巫婆,当我有单独的持久性单位工作过)没有任何反应,代码停在createEntity行上,就是这样。

的persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" 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_2_0.xsd"> 
    <persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <properties> 
     <property name="eclipselink.composite-unit" value="true"/> 
    </properties> 
    </persistence-unit> 
    <persistence-unit name="Minutis" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <class>database.entity.Entity1</class> 
    <class>database.entity.Entity2</class> 
    ... 
    <properties> 
     <property name="eclipselink.composite-unit.member" value="true"/> 
    </properties> 
    </persistence-unit> 
    <persistence-unit name="Minutis2" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <class>database.entity.EEntity1</class> 
    <class>database.entity.EEntity2</class> 
    ... 
    <properties> 
     <property name="eclipselink.composite-unit.member" value="true"/> 
    </properties> 
    </persistence-unit> 
    <persistence-unit name="Minutis3" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <class>database.entity.EEEntity1</class> 
    <class>database.entity.EEEntity2</class> 
    ... 
    <properties> 
     <property name="eclipselink.composite-unit.member" value="true"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

这是怎么EntityManager创建:

Map minutis = new HashMap(); 
minutis.put("javax.persistence.jdbc.user", "user"); 
minutis.put("javax.persistence.jdbc.password", "password"); 
minutis.put("javax.persistence.jdbc.driver", "driver"); 
minutis.put("javax.persistence.jdbc.url", "url"); 

Map minutis2= new HashMap(); 
minutis2.put("javax.persistence.jdbc.user", "user"); 
minutis2.put("javax.persistence.jdbc.password", "password"); 
minutis2.put("javax.persistence.jdbc.driver", "driver"); 
minutis2.put("javax.persistence.jdbc.url", "url"); 

Map minutis3= new HashMap(); 
minutis3.put("javax.persistence.jdbc.user", "user"); 
minutis3.put("javax.persistence.jdbc.password", "password"); 
minutis3.put("javax.persistence.jdbc.driver", "driver"); 
minutis3.put("javax.persistence.jdbc.url", "url"); 

Map persistanceUnitsProps = new HashMap(); 
persistanceUnitsProps.put("Minutis", minutis); 
persistanceUnitsProps.put("Minutis2", minutis2); 
persistanceUnitsProps.put("Minutis3", minutis3); 

Map props = new HashMap(); 
props.put("eclipselink.logging.level", "FINEST"); 
props.put("eclipselink.composite-unit.properties", persistanceUnitsProps); 

EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistenceUnit", props); 
em = emf.createEntityManager(); 

这里是一个输出,我得到:

run: 
[EL Finest]: 2012-10-09 09:04:43.071--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--Begin predeploying Persistence Unit persistenceUnit; session file:/C:/Users/Minutis/Documents/NetBeansProjects/JavaApplication4/build/classes/_persistenceUnit; state Initial; factoryCount 0 
[EL Finest]: 2012-10-09 09:04:43.099--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--property=eclipselink.orm.throw.exceptions; default value=true 
[EL Finest]: 2012-10-09 09:04:43.116--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--End predeploying Persistence Unit persistenceUnit; session file:/C:/Users/Minutis/Documents/NetBeansProjects/JavaApplication4/build/classes/_persistenceUnit; state Predeployed; factoryCount 0 
[EL Finer]: 2012-10-09 09:04:43.117--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--JavaSECMPInitializer - transformer is null. 
[EL Finest]: 2012-10-09 09:04:43.117--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--Begin predeploying Persistence Unit persistenceUnit; session file:/C:/Users/Minutis/Documents/NetBeansProjects/JavaApplication4/build/classes/_persistenceUnit; state Predeployed; factoryCount 0 
[EL Finest]: 2012-10-09 09:04:43.117--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--End predeploying Persistence Unit persistenceUnit; session file:/C:/Users/Minutis/Documents/NetBeansProjects/JavaApplication4/build/classes/_persistenceUnit; state Predeployed; factoryCount 1 
[EL Finest]: 2012-10-09 09:04:43.125--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--Begin deploying Persistence Unit persistenceUnit; session file:/C:/Users/Minutis/Documents/NetBeansProjects/JavaApplication4/build/classes/_persistenceUnit; state Predeployed; factoryCount 1 
[EL Finest]: 2012-10-09 09:04:43.128--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--property=eclipselink.logging.level; value=FINEST 
[EL Finest]: 2012-10-09 09:04:43.128--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--property=eclipselink.logging.level; value=FINEST 
[EL Info]: 2012-10-09 09:04:43.13--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--EclipseLink, version: Eclipse Persistence Services - 2.3.0.v20110604-r9504 
[EL Info]: 2012-10-09 09:04:43.138--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--file:/C:/Users/Minutis/Documents/NetBeansProjects/JavaApplication4/build/classes/_persistenceUnit login successful 
[EL Warning]: 2012-10-09 09:04:43.146--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--The collection of metamodel types is empty. Model classes may not have been found during entity search for Java SE and some Java EE container managed persistence units. Please verify that your entity classes are referenced in persistence.xml using either <class> elements or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element 
[EL Finer]: 2012-10-09 09:04:43.146--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--The collection of metamodel types is empty. Model classes may not have been found during entity search for Java SE and some Java EE container managed persistence units. Please verify that your entity classes are referenced in persistence.xml using either <class> elements or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element 
[EL Finest]: 2012-10-09 09:04:43.147--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--End deploying Persistence Unit persistenceUnit; session file:/C:/Users/Minutis/Documents/NetBeansProjects/JavaApplication4/build/classes/_persistenceUnit; state Deployed; factoryCount 1 

编辑2:

我觉得问题是持久性单元没有看到任何实体,尽管我使用类标签声明了它们......对此有何帮助?

+0

对此有何帮助? – Minutis

+0

你有没有发现如何使用单个persistence.xml文件的用户合成持久性单元? –

回答

0

你有什么错误?还是挂?如果它挂起,你需要打破它并获得堆栈跟踪。

一般而言,您需要的是,这是指定子持久性单元的唯一方法。你不需要将这些类放在jar文件中(尽管这是最容易做的事情),你可以在jar中放置persistence.xml文件。

+0

问题是,虽然我使用标记将它们声明为复合持久性成员(也尝试在复合持久性单元中工作),但该复合持久单元不识别任何实体。请参阅输出信息中的警告。 – Minutis

+0

嘿,我也面临同样的问题。你有没有找到解决办法? – Ketan

0

我遇到了同样的问题,采用了类似的方法,但我坚持下一步。我通过在另一个项目中创建实体来解决这个问题,然后将它们粘贴到主项目中,并最终将实体包括在persistence单元中(我将其预定义到persistence.xml中,并在执行时重新定义数据库)。之后,实体得到了认可,但该单位“混合”了一下。

相关问题