WebLogic 10.3 JPA 1.0缺少类的描述符

时间:2012-04-03 13:30:53

标签: stored-procedures jpa weblogic-10.x

我正在使用带有JPA 1.0的WebLogic 10.3。

实体类是:

@Entity
public class ZoneAgency implements Serializable {

   public ZoneAgency() {
      super();
   }

   @Id
   @Column(name = "zoneid", nullable = false)
   private Integer zoneId;

   @Id
   @Column(name = "agencyid", nullable = false)
   private Integer agencyId;
}

它也添加在persistence.xml中:

<?xml version="1.0" encoding="windows-1252" ?>
<persistence 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"
             version="1.0">
  <persistence-unit name="smthModel">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/smthDS</jta-data-source>
    <class>smth.model.entities.ZoneAgency</class>
    <properties>
      <property name="eclipselink.target-server" value="WebLogic_10"/>
      <property name="javax.persistence.jtaDataSource" value="jdbc/smthDS"/>
      <property name="eclipselink.cache.shared.default" value="false"/>
    </properties>
  </persistence-unit>
</persistence>

我在以下调用中使用此类:

Query query = entityManager.createNativeQuery("call get_zone_agency_by_channel_type_rr(?,?)", ZoneAgency.class);

其中get_zone_agency_by_channel_type_rr是一个返回此选择结果的存储过程:

select t_zone_id as zoneid, t_agency_id as agencyid;

此实体类包装在一个jar文件中,该文件用作Web应用程序(war文件)中的依赖项。此战争包含在ear文件中并部署在WebLogic上。

问题在于 当我安装/更新部署时,entityManager.createNativeQuery调用工作正常; 当我停止Web应用程序然后重新启动它时,我收到以下错误:

Exception Description: Missing descriptor for [class smth.model.entities.ZoneAgency].
Query: ReadAllQuery(referenceClass=ZoneAgency sql="call get_zone_agency_by_channel_type_rr(?,?)")

问题是什么?

1 个答案:

答案 0 :(得分:1)

这似乎是一个类加载器问题。我的猜测是旧的持久性单元仍然部署在服务器中。

当您使用容器管理(注入/ jta)持久性单元时,服务器负责取消部署它。

使用应用程序管理的持久性单元(Persistence.createEntityManagerFactory())时,必须确保在重新部署实时服务器之前将其关闭。否则它将继续部署。