我正在编写一个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抽象类......?