0

単純な DataGrid に「製品」のリストをロードしようとすると、このエラーが発生します。

Didn't receive an acknowledge message
Was expecting mx.messaging.messages.AcknowledgeMessage, but received null

いくつかのテストの後、マッピングの問題であることがわかりました。注釈に慣れていないため、ここから来ている可能性があります。私のクラスは次のとおりです。

Product.java :

@Entity
@Table(name="product")
public class Product implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="product_id")
    private long productId;

    private String name;

    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    @JoinColumn(name="category_id")
    private Category category;

    @OneToMany(mappedBy = "product", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Collection<Buy> clients;

    ...Getters & Setters...
}

クライアント.java

@Entity
@Table(name="client")
public class Client implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="client_id")
    private long clientId;

    private String name;

    @OneToMany(mappedBy = "client", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Collection<Buy> products;

    public long getClientId() {
        return clientId;
    }

    public void setClientId(long clientId) {
        this.clientId = clientId;
    }

    ...Getters & Setters...
}

Buy.java

@Entity
@Table(name="buy")
public class Buy implements Serializable
{
    @EmbeddedId
    private BuyId buyId;

    @ManyToOne
    @PrimaryKeyJoinColumn(name="product_id", referencedColumnName="product_id")
    private Product product;

    @ManyToOne
    @PrimaryKeyJoinColumn(name="client_id", referencedColumnName="client_id")
    private Client client;

    @Temporal(value = TemporalType.DATE)
    private Date date;

    ...Getters & Setters...
}

BuyId.java

public class BuyId implements Serializable
{
    private long clientId;

    private long productId;

    ...Getters & Setters...
}

Id と Name しかないため、カテゴリは問題ではありません。製品とカテゴリの間の関連付けは一方向です。実際の問題は、データベースから製品を取得しようとすると、このエラーが発生し、私が言ったように、ほとんどマッピング/注釈の間違いに起因することは確かです...

ありがとう。

4

1 に答える 1

1

問題は、Flex アプリケーションのどこにもクラス Buy.as を参照していない可能性が高いため、Flex コンパイラがこのクラスを swf に含めなかったため、逆シリアル化中にこの ArgumentError が発生したことです。これを確認する簡単な方法は、 mxml にダミー変数を追加することです。 private static var dummy:Buy = null;

詳細については、こちらを参照してください。

于 2010-08-11T09:28:51.183 に答える