-1

在一个 JSF 2.1 - Spring 3.1 集成项目中。我正在尝试在我的项目中使用 eclipselink 2.3.2、Glassfish 3.1.2 和 Maven 通过容器处理事务,并使用 Netbeans IDE 7.2。

在服务层,我通过下面的代码注入了实体管理器,在调试时似乎没问题。

 @Inject
public void setEntityManager() {
EntityManagerFactory emfactory =Persistence.createEntityManagerFactory
("E_DefterManagementPU");
    this.em = emfactory.createEntityManager();

但是在我填写了名为EfaFunctions的实体并尝试坚持使用

em.persist(EfaFunctions);

它给出了这个错误

java.lang.IllegalArgumentException: Object: org.eclipse.persistence.internal.jpa.EntityManagerImpl@599ebbf6
 is not a known entity type.

但在 **persistence.xml ** 我有以下节点

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>   
<jta-data-source>EFA</jta-data-source>   
<exclude-unlisted-classes>false</exclude-unlisted-classes>

我的实体项目位置是 com.edefter.entity.EfaFunctions ;不是错误中指定的位置。实际上,Pascal在此链接中有一个答案, 但我的生成策略没有,我的实体是由 netbeans 从数据库生成的。我需要一些专家咨询。提前致谢

我删除了

@Table(name="EFA_FUNCTIONS")

来自 Entity 顶部的注释,但 @Entity 仍然存在。错误消失了,但查询开始为

INSERT INTO EFAFUNCTIONS

没有下划线,但我需要

 INSERT INTO EFA_FUNCTIONS

,因为它没有插入数据。为什么eclipselink为@Table注释给出错误,尽管没有像EFAFUNCTIONS这样的表,为什么它没有给出任何错误

4

3 回答 3

2

我解决了这个问题,正如我在问题中提到的那样,我已经通过 Netbeans 从数据库生成实体,所以我没有怀疑实体格式。我在休眠之前曾作为 ORM 和休眠加上 DB2 或 MYSQL 工作。这些组合没有给出错误具有相同的用法。但是结合 Eclipselink - Oracle DB @Entity注释必须是如下所示的参数

@Entity(name="entityName")

@Table(name="TableName")

感谢您的评论。

于 2013-05-14T13:00:56.217 回答
0

你为什么要尝试坚持一个 EntityManager ?更好地传递(到em.persist)一个实体(标记为@Entity的那些类之一)

于 2013-05-13T14:40:33.110 回答
0

当试图通过调用实体管理器来持久化实体类的对象时,我遇到了类似的问题persist(): 

java.lang.IllegalArgumentException:对象:entities.Documents[id=null] 不是已知的实体类型。

原来在persistence.xml中声明的持久化单元的名字

<persistence-unit name="my-pu" transaction-type="RESOURCE_LOCAL">

与我在 java 代码中声明实体管理器工厂时使用的名称不同:

 EntityManagerFactory entityManagerFactory =  Persistence.createEntityManagerFactory("my-persistenceunit");

将两个名称更正为相同名称后,调用persist()按预期工作。

于 2016-01-02T23:03:14.183 回答