我正在使用带有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(?,?)")
问题是什么?
答案 0 :(得分:1)
这似乎是一个类加载器问题。我的猜测是旧的持久性单元仍然部署在服务器中。
当您使用容器管理(注入/ jta)持久性单元时,服务器负责取消部署它。
使用应用程序管理的持久性单元(Persistence.createEntityManagerFactory())时,必须确保在重新部署实时服务器之前将其关闭。否则它将继续部署。