2010-08-05 1 views
8

В веб-приложении, использующем спящий режим struts2 ejb, можно сказать, что приложение может найти или создать сущность для определенного имени единицы сохранения, которое написано в файле persistence.xml , во время развертывания?Как привязать объект к определенному узлу с постоянством

У меня есть две единицы постоянства в persistence.xml и один источник данных (включая два файла local-tx-datasource) xml под узлом jboss.

Чтобы уточнить, я имею в виду, я пробовал это;

@Entity 
@PersistenceContext(unitName="MY JNDI NAME specified in persistence.xml") 
public abstract class Vehicle { 

и не работает .. Затем попытался это и т.д ..

@PersistenceContext(name="MY PERSISTENCE UNIT NAME specified in persistence.xml") 

@PersistenceUnit(name="MY PERSISTENCE UNIT NAME specified in persistence.xml") 

, а также я попробовал это выше с «UnitName = ..» вместо «имя = ..», но ничего это работает для меня ...

[решено]

< .exclude-классы частными,-> верно < ./exclude-unlisted-cl ослы> решил мою проблему

+0

Можете ли вы подтвердить, что вы совместили '<исключить-UNLISTED-классы> True' с перечислением всех классов сущностей (' ком. mycompany.Foo 'и т. д.)? Предпочтительно отредактировать эту информацию в части ** [SOLVED] ** вашего вопроса. –

ответ

9

Update: Основываясь на ваш комментарий (это не то, что я понял из оригинального вопроса), я не думаю, что у вас есть какой-либо другой вариант, чем отключение «открытие» и листинг явно ваши лица в их соответствующей единице сохранения:

<?xml version="1.0" encoding="UTF-8"?> 
<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_2_0.xsd" 
    version="2.0"> 

    <persistence-unit name="MyPu1" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <class>com.mycompany.Foo</class> 
    ... 
    <exclude-unlisted-classes>true</exclude-unlisted-classes> 
    <properties> 
     <!-- H2 in memory --> 
     <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test"/> 
     <property name="javax.persistence.jdbc.username" value="APP"/> 
     <property name="javax.persistence.jdbc.password" value="APP"/> 
     <property name="hibernate.hbm2ddl.auto" value="update"/> 
    </properties> 
    </persistence-unit> 

    <persistence-unit name="MyPu2" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <class>com.mycompany.Bar</class> 
    ... 
    <exclude-unlisted-classes>true</exclude-unlisted-classes> 
    <properties> 
     <!-- Derby server --> 
     <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/> 
     <property name="javax.persistence.jdbc.user" value="APP"/> 
     <property name="javax.persistence.jdbc.password" value="APP"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/Pu2;create=true"/> 
     <property name="hibernate.hbm2ddl.auto" value="update"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

Я не знаю ни одного синтаксиса на уровне объекта, позволяющем присвоить его единицу сохранения.


Я не уверен, что я понял, что вы пытаетесь сделать, но если вы хотите получить Entity менеджер для конкретных инерционности блока закачиваемой, вы должны сделать:

@Stateless 
public class FooBean implements Foo { 
    @PersistenceContext(unitName="MyPu1") 
    EntityManager em1; 

    // ... 
} 

Если это не то, что вы хотите, пожалуйста, уточните вопрос.

+0

Сначала спасибо за ваш ответ. Как мы знаем, когда я добавляю @Entity anno. для класса он будет искать и должен создавать таблицу в БД только во время развертывания. В моем приложении все объекты просматриваются только в одном файле persistenceUnit, и это неверно. Я хочу сказать, что я хочу, чтобы мои объекты искали или создавались в другом БД, который указан в другом файле persistenceUnit. В результате я хочу конкретно сказать, что мое приложение должно искать или создавать выбранные объекты только для выбранного объекта persistenceUnit (который включает в себя правильные настройки БД). Любая идея? Спасибо – Javatar

+0

Кстати, стоит еще раз сказать, что у меня есть две единицы постоянства в persistence.xml. Я имею в виду, у меня есть два параметра подключения DB в моем приложении, и я хочу использовать ту или иную зависимость от объектов, которые я хочу. Я хочу сказать: «Эй, вы должны увидеть эту сущность в виде таблицы только в той БД (потому что она уже существует), которую вы можете найти в настройках БД в этом имени единицы целостности! Итак, используйте это постоянство -unit для этого объекта « – Javatar

+0

true решена моя проблема, спасибо большое Pascal – Javatar

-1

@Pascal Thivent

Я не пробовал использовать несколько EntityManager сразу, но, глядя на упомянутой выше проблемы, это может помочь, если она работает.

@PersistenceContext(unitName="MyPu1") EntityManager em1;

@PersistenceContext(unitName="MyPu2") EntityManager em2;

+1

Ну, это точно мое предложение. Но, похоже, OP ищет что-то еще. –

+0

Спасибо Nayan. Однако проблема не в том, что инъекция сущ. Я добавил комментарий к первому ответу выше. Если у вас есть представление о проблеме, о которой я упомянул, мне было бы здорово это услышать. – Javatar

+0

@ Downvoter OP разъяснен в комментарии, который отличается от оригинального вопроса; что пошло не так, чтобы излишнее сделать излишнее. –

0

Что вы ищете, вероятно <exclude-unlisted-classes>true</exclude-unlisted-classes>.

Проверьте документацию на jboss.org:

В моей конфигурации я имел две баз данных (скажем, А и В), и я хотел два отдельных блока сохраняемости, где один содержит все объекты, кроме одного, в то время как другие единица сохранения содержит оставшуюся сущность. Мое упорство.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_2_0.xsd" 
version="2.0"> 
<persistence-unit name="A" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <properties> 
     <property name="hibernate.dialect" value="${hibernate.dialect}" /> 
    </properties> 
</persistence-unit> 

<persistence-unit name="B" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <exclude-unlisted-classes>true</exclude-unlisted-classes> 
    <properties> 
     <property name="hibernate.dialect" value="${rud.hibernate.dialect}"/> 
    </properties> 
    <class>com.sgk.Person</class> 
</persistence-unit>