Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA[Hibernate]延迟加载GWT问题_Java_Hibernate_Gwt_Jpa - Fatal编程技术网

Java JPA[Hibernate]延迟加载GWT问题

Java JPA[Hibernate]延迟加载GWT问题,java,hibernate,gwt,jpa,Java,Hibernate,Gwt,Jpa,我试图在GWT前端使用惰性加载JPA[Hibernate] 在实体中 @ManyToOne(targetEntity = Item.class,fetch=FetchType.LAZY) private Item item; 在道 @Transactional public List<Purchase> findAllPurchases() { return jpaTemplate.execute(new JpaCallback<List<Purchase

我试图在GWT前端使用惰性加载JPA[Hibernate]

在实体中

 @ManyToOne(targetEntity = Item.class,fetch=FetchType.LAZY)
 private Item item;
在道

 @Transactional
 public List<Purchase> findAllPurchases() {
   return jpaTemplate.execute(new JpaCallback<List<Purchase>>(){
   public List<Purchase> doInJpa(EntityManager em)
    throws PersistenceException {
    List<Purchase> list = em.createQuery("select o from Purchase o").getResultList();
    for(Purchase p:list){
     Item item = p.getItem();
     if(item!=null)
     item.getItemName();
    }
 return list;
}
@Transactional
公共列表findAllPurchases(){
返回jpaTemplate.execute(新的JpaCallback(){
公共列表doInJpa(实体管理器em)
抛出PersistenceException{
List List=em.createQuery(“从采购订单中选择订单”).getResultList();
用于(采购p:列表){
Item=p.getItem();
如果(项!=null)
getItemName();
}
退货清单;
}
})); }

我收到了这个错误

com.google.gwt.user.client.rpc.SerializationException:类型“com.hardwarestore.vo.Item_$$\u javassist_0”未包含在可由此序列化策略序列化的类型集中,或者无法加载其类对象。出于安全目的,将不会序列化此类型。:instance=com.hardwarestore.vo。Item@a1eaf6


Purchase类和Item类都实现了可序列化接口。感谢您的任何帮助。谢谢。

GWT中的序列化程序无法序列化集合的代理对象,因为它的类是在运行时在服务器部件中创建的。要序列化反序列化,必须在compiletime(我认为)找到ProxyObject源


就我所知,在GWT中序列化的过程是无法进行延迟加载的。您必须以这种方式转换实体,创建一个可调用的方法,该方法通过保存集合的实体的主键从JS加载集合,或者您必须将集合切换到即时加载。

或者,您可以使用DTO(数据传输对象)。只需在服务器端转换持久化对象,然后再将其发送到客户端。

是的,深度克隆似乎是目前唯一的方法。这是我最不想做的事情。但是GWT让我们回到DTO时代不是很糟糕吗?同样的问题也得到了解决和解决。