在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这样的表为什么它不会给出任何错误
答案 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()
按预期工作。