JPA - 未知的实体bean类 [英] JPA - Unknown entity bean class
本文介绍了JPA - 未知的实体bean类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
@MappedSuperclass
公共抽象类Swab实现ISwab {
...
私人收藏< SwabAccounts>账户;
...
}
@Entity
@Table(name =switches)
@DiscriminatorColumn(name =type)
@DiscriminatorValue(value =DMS500)
public class DmsSwab extends Swab实现ISwab,Serializable {
...
私有ObjectPool池;
...
@Transient
public ObjectPool getPool(){
return pool;
}
...
}
@Entity(name =swab_accounts)
public class SwabAccounts implements Serializable {
private static最终的长串serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int swab_account_id;
private int swab_id;
...
}
在EJB中,一个查询正在执行这样
DmsSwab dms = em.find(DmsSwab.class,2);
清单<拭子> s = new ArrayList< Swab>(1);
s.add(dms);
我的persistence.xml如下所示:
<?xml version =1.0encoding =UTF-8?>
< persistence version =1.0xmlns =http://java.sun.com/xml/ns/persistencexmlns:xsi =http://www.w3.org/2001/XMLSchema-实例xsi:schemaLocation =http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd\">
< persistence-unit name =dflow-putransaction-type =RESOURCE_LOCAL>
< provider> oracle.toplink.essentials.PersistenceProvider< / provider>
< class> com.dcom.sap.dms.DmsSwab< / class>
< class> com.dcom.sap.jpa.SwabAccounts< / class>
<属性>
< property name =toplink.jdbc.uservalue =dflow/>
< property name =toplink.jdbc.passwordvalue =dflow/>
< property name =toplink.jdbc.urlvalue =jdbc:mysql:// itcd-400447:3306 / dflow/>
< property name =toplink.jdbc.drivervalue =com.mysql.jdbc.Driver/>
< / properties>
< / persistence-unit>
< /余辉>
我得到这个错误:
java.lang.IllegalArgumentException:未知实体bean类:class com.dcom.sap.dms.DmsSwab,请验证此类是否已用@Entity注释标记。
com.dcom.sap.SwabException:java.lang.IllegalArgumentException:未知实体bean类:class com.dcom.sap.dms.DmsSwab,请验证此类是否已用@Entity注释标记。
导致:java.lang.IllegalArgumentException:未知实体bean类:class com.dcom.sap.dms.DmsSwab,请验证此类是否已使用@Entity注释标记。
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.findInternal(EntityManagerImpl.java:306)
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.find( EntityManagerImpl.java:148)
我正在运行netbeans 6.1,它附带了glassfish的版本。 MySql 5.0。
解决方案
在persistence.xml中的类标记中定义此实体
Hopefully, I can explain this issue properly. I have 3 classes that deals with my entities.
@MappedSuperclass
public abstract class Swab implements ISwab {
...
private Collection<SwabAccounts> accounts;
...
}
@Entity
@Table(name="switches")
@DiscriminatorColumn(name="type")
@DiscriminatorValue(value="DMS500")
public class DmsSwab extends Swab implements ISwab, Serializable {
...
private ObjectPool pool;
...
@Transient
public ObjectPool getPool(){
return pool;
}
...
}
@Entity(name="swab_accounts")
public class SwabAccounts implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int swab_account_id;
private int swab_id;
...
}
And in a EJB a query is being doing this way
DmsSwab dms = em.find(DmsSwab.class, 2);
List<Swab> s = new ArrayList<Swab>(1);
s.add(dms);
My persistence.xml looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="dflow-pu" transaction-type="RESOURCE_LOCAL">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<class>com.dcom.sap.dms.DmsSwab</class>
<class>com.dcom.sap.jpa.SwabAccounts</class>
<properties>
<property name="toplink.jdbc.user" value="dflow"/>
<property name="toplink.jdbc.password" value="dflow"/>
<property name="toplink.jdbc.url" value="jdbc:mysql://itcd-400447:3306/dflow"/>
<property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
</properties>
</persistence-unit>
</persistence>
I get this error:
java.lang.IllegalArgumentException: Unknown entity bean class: class com.dcom.sap.dms.DmsSwab, please verify that this class has been marked with the @Entity annotation.
com.dcom.sap.SwabException: java.lang.IllegalArgumentException: Unknown entity bean class: class com.dcom.sap.dms.DmsSwab, please verify that this class has been marked with the @Entity annotation.
Caused by: java.lang.IllegalArgumentException: Unknown entity bean class: class com.dcom.sap.dms.DmsSwab, please verify that this class has been marked with the @Entity annotation.
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.findInternal(EntityManagerImpl.java:306)
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.find(EntityManagerImpl.java:148)
I am running netbeans 6.1 with the version of glassfish that comes with it. MySql 5.0.
解决方案
define this entity in class tag inside the persistence.xml
这篇关于JPA - 未知的实体bean类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文