Сериализация абстрактного класса Java в метод класса ActionScript? - PullRequest
0 голосов
/ 31 января 2012

Я пишу гибкий 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....
    }

, но я получаю следующую ошибку, независимо от того, каким образом реализован ActionScript, при попытке передать корректировку для flex

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

Проходят другие поля настройки, некоторые из которых являются классами ... просто не детали ...

любые идеи о том, как это исправить, чтобы детали могли бытьодин из множества различных типов, извлеченных из базы данных?

есть ли способ заставить flex использовать абстрактный класс Java, как он реализован ...?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...