在我的項目中,我使用了Seam 3
,並且我注意到注入了EntityManager
和@Inject
註釋。我很確定有一些配置可以確保EnityManager
知道要使用哪個PersistenceUnit
。例如用EJB
可以鍵入:配置能夠在@Seam中注入EntityManager 3
@PersistenceContext(unitName="MY_PERSISTENCE_UNIT_NAME")
private EntityManager eManager;
其持久性單元在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="MY_PERSISTENCE_UNIT_NAME" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/TimeReportDS</jta-data-source>
<mapping-file>META-INF/orm.xml</mapping-file>
<class>....</class>
<class>....</class>
<class>....</class>
<properties>
<property name="jboss.entity.manager.factory.jndi.name"
value="java:/modelEntityManagerFactory" />
<!-- PostgreSQL Configuration File -->
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
<property name="hibernate.connection.password" value="password" />
<property name="hibernate.connection.url" value="jdbc:postgresql://192.168.2.125:5432/t_report" />
<property name="hibernate.connection.username" value="username" />
<!-- Specifying DB Driver, providing hibernate cfg lookup
and providing transaction manager configuration -->
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
<property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory"/>
<property name="hibernate.transaction.manager_lookup_class"
value="org.hibernate.transaction.JBossTransactionManagerLookup" />
<property name="hibernate.archive.autodetection" value="class" />
<!-- Useful configuration during development - developer can see structured SQL queries -->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="false" />
</properties>
</persistence-unit>
</persistence>
我已經加入了閱讀接縫2的一些文章,但沒有配置在components.xml
文件由:
<persistence:managed-persistence-context
name="entityManager" auto-create="true" persistence-unit-jndi-name="java:/modelEntityManagerFactory" />
的<components>
標籤內。在接縫2的下一個步驟是添加:
<property name="jboss.entity.manager.factory.jndi.name"
value="java:/modelEntityManagerFactory" />
在
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence ...>
<persistence-unit name="MY_PERSISTENCE_UNIT_NAME" ...>
...
<properties>
...
<property name="jboss.entity.manager.factory.jndi.name"
value="java:/modelEntityManagerFactory" />
</properties>
</persistence-unit>
</persistence>
但接縫,在煤層3沒有文件components.xml
。 @Inject
註釋中也沒有unitName
的屬性來指定持久性單元。
因此,請幫助我配置我的項目,以便我可以使用@Inject
和EntityManager
,如網上的許多示例所示。
我使用Postgres
數據庫和JBoss AS 7
。
編輯:添加一個例子。我不在Entity
類中使用EntityManager
。
@Named("validateReportAction")
@SessionScoped
public class ValidateReportAction extends ReportAction implements Serializable {
private static final long serialVersionUID = -2456544897212149335L;
@Inject
private EntityManager em;
...
}
在這裏,在這個@Inject
我從Eclipse
「No bean is eligible for injection to the injection point [JSR-299 §5.2.1]
」
警告,如果我上了些豆子,被標記爲Entity
的@Inject
工作正常使用@Inject
。
你有什麼問題?如果在同一個persistence.xml中有多個持久性單元,則只需在註釋中使用鑑別符。因爲它只是一個默認值。確保你的persistence.xml和你的DAO和Entity類在同一個模塊(JAR)中。 – Perception 2012-01-06 19:24:43
@Perception請看看我編輯的帖子,並給我一些鑑別器的例子。 – nyxz 2012-01-06 20:35:14
Maistora - 你不需要鑑別註釋,你只有一個PU在你的persistence.xml。但基於您添加的錯誤消息,我很確定Eclipse沒有找到您的JBoss JEE實現文件。如果您使用的是Maven,那麼您需要將jboss-javaee-web-6.0依賴項添加到您的POM中。如果您使用其他構建工具,那麼您需要手動查找並添加JAR到您的項目類路徑。 – Perception 2012-01-06 20:49:22