Eclipselink -Glassfish项目Object不是已知的实体类型错误

时间:2013-05-13 14:19:57

标签: jpa dependency-injection eclipselink entitymanager

在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 in this link编写的答案 但我的生成策略是没有的,我的网站是由netbeans从数据库生成的。我需要一些专家建议。在此先感谢

我删除了

@Table(name="EFA_FUNCTIONS")
来自实体顶部的

注释,但@Entity仍然存在。 错误消失但查询以

开始
INSERT INTO EFAFUNCTIONS

没有下划线但我需要

 INSERT INTO EFA_FUNCTIONS

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

3 个答案:

答案 0 :(得分:2)

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

@Entity(name="entityName")

@Table(name="TableName")

感谢您的评论。

答案 1 :(得分:0)

为什么要尝试持久化EntityManager?更好地传入(到em.persist)一个实体(其中一个类标记为@Entity)

答案 2 :(得分:0)

当尝试通过在entitymanager上调用persist()来持久化实体类的对象时,我遇到了类似的问题:

  

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

事实证明,在行

中的persistence.xml中声明了持久性单元的名称
<persistence-unit name="my-pu" transaction-type="RESOURCE_LOCAL">

与我在java代码中声明Entity Manager Factory时使用的名称不同:

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

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