JPA - 未知的实体bean类 [英] JPA - Unknown entity bean class

查看:176
本文介绍了JPA - 未知的实体bean类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

希望我能正确解释这个问题。我有3个类处理我的实体。

  @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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆