【问题标题】:Eclipselink -Glassfish project Object is not a known entity type errorEclipselink -Glassfish 项目对象不是已知的实体类型错误
【发布时间】:2013-05-13 14:19:56
【问题描述】:

在一个 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 顶部的注释,但 @Entity 仍然存在。 错误消失了,但查询开始为

INSERT INTO EFAFUNCTIONS

没有下划线,但我需要

 INSERT INTO EFA_FUNCTIONS

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

【问题讨论】:

    标签: jpa dependency-injection eclipselink entitymanager


    【解决方案1】:

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

    @Entity(name="entityName")

    @Table(name="TableName")

    感谢您的评论。

    【讨论】:

      【解决方案2】:

      您为什么要尝试持久化 EntityManager ?将实体(标记为@Entity 的类之一)传入(到em.persist)要好得多

      【讨论】:

      • 对不起输入错误我已经给它一个实体作为参数;我更新了它
      • @James 我在下面的代码中给出了 EntityManager 对象而不是 EfaFunctions 。感谢您的关注我猜我解决了问题 em.persist(EfaFunctions);
      • 我正在等待时间限制,我会写原因,但问题与您的回答无关,谢谢
      【解决方案3】:

      当我尝试通过在 entitymanager 上调用 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() 正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-11
        • 2011-03-12
        • 1970-01-01
        • 1970-01-01
        • 2011-04-01
        • 2012-02-25
        相关资源
        最近更新 更多