Eclipselink -Glassfish项目对象不是一个已知的实体类型错误



在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();

但是在我填充了名为的实体之后,effunctions 并尝试坚持使用

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. effunctions;而不是在错误中指定的位置。实际上在这个链接中有一个由Pascal编写的答案但是我的生成策略是没有的,我的实体是由netbeans从数据库生成的,我需要一些专家的建议。提前感谢

我删除了

@Table(name="EFA_FUNCTIONS")

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

INSERT INTO EFAFUNCTIONS
没有下划线的

但是我需要

 INSERT INTO EFA_FUNCTIONS

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

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

@Entity(name="entityName")

@Table(name="TableName")

谢谢你的评论。

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

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

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

显示持久性单元的名称在persistence.xml

行中声明
<persistence-unit name="my-pu" transaction-type="RESOURCE_LOCAL">

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

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

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

相关内容

最新更新