将Java抽象类序列化为ActionScript类方法?

时间:2012-01-30 21:02:02

标签: java flex hibernate

我正在编写一个flex RIA,它与java后端进行通信。我有以下内容 Java中的类,它使用hibernate注释。

@Entity
@Table(name="Adjustment")
public class Adjustment implements Serializable {
   @OneToOne(fetch = FetchType.EAGER)
   private AdjustmentDetails _adjustmentDetails;
   ....
   has other fields, not important to context of question
 }

@Entity
@Table(name = "AdjustmentDetails")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class AdjustmentDetails {
    @Id
    @Column(name = "sale_order_number", nullable = false)
    protected Integer   _saleOrderNumber;

    public abstract Integer getSaleOrderNumber();

    public abstract void setSaleOrderNumber(Integer saleOrderNumber);
}

@Entity
@Table(name="Cancellations")
public class Cancellation extends AdjustmentDetails implements Serializable {

     fields...
 }

@Entity
@Table(name="GiftCardAdjustment")
public class GiftCardAdjustment extends AdjustmentDetails {
     fields...
}

这完全按照我的需要设置数据库。 现在我试图将一个调整传递给flex,在actionscript中使用以下类结构。

[Bindable]
[RemoteClass(alias="Adjustment")]
public class Adjustment{
    private var _adjustmentDetails:AdjustmentDetails;
}

现在问题是...... 我遇到了麻烦,因为flex不支持抽象类,或者更重要的是, java对象必须有一个无参数构造函数才能传递给flex。我试过了 此...

[Bindable]
[RemoteClass(alias="AdjustmentDetails")]
public class AdjustmentDetails{
    public function AdjustmentDetails(){}
}

[Bindable]
[RemoteClass(alias="Cancellations")]
public class Cancellation extends AdjustmentDetails {
   private var _saleOrderNumber:int;
    public function set saleOrderNumber(saleOrderNumber:int):void{
       _saleOrderNumber = saleOrderNumber;
    }
     public function get saleOrderNumber():int { return _saleOrderNumber;}
 }

我试过这个......

[Bindable]
[RemoteClass(alias="AdjustmentDetails")]
public class AdjustmentDetails{
    protected _saleOrderNumber:int;
    public function AdjustmentDetails(saleOrderNumber:int = 0){
        _saleOrderNumber = saleOrderNumber;         
    }
    public function get saleOrderNumber():int{
      return _saleOrderNumber;
    }
    public function set saleOrderNumber(saleOrderNumber:int):void{
      _saleOrderNumber = saleOrderNumber;
    }
}

[Bindable]
[RemoteClass(alias="Cancellations")]
public class Cancellation extends AdjustmentDetails {
           public function Cancellation(saleOrderNumber:int){
                     super(saleOrderNumber);
            } 
}

我试过了

[Bindable]
[RemoteClass(alias="AdjustmentDetails"]
public interface AdjustmentDetails {
      function get saleOrderNumber():int;
      function set saleOrderNumber(saleOrderNumber:int);
}

   [Bindable]
   [RemoteClass(alias="Cancellation")]
    public class Cancellation implements AdjustmentDetails{

          saleOrderNumber functions....
    }

但是在尝试将调整传递给flex时,无论动作脚本的实现方式如何,我都会收到以下错误

TypeError: Error #1034: Type Coercion failed: cannot convert Object@1a33c509 to
com.wctny.db.model.AdjustmentDetails.

调整的其他字段被传递,其中一些是类......而不是细节......

有关如何解决此问题的任何想法,以便细节可以是从数据库中提取的众多不同类型之一?

有没有办法让flex使用java抽象类......?

0 个答案:

没有答案
相关问题