在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()
按预期工作。