1

私は GWT の RequestFactory を使用して (現時点では) 非常に単純なことを行い、それぞれがいくつかのデータと別のオブジェクトを含むオブジェクトのリストを返そうとしています。他のオブジェクトを取得できないようです-代わりに、常にnullを取得します。

私のコードは次のようになります...

それぞれ Message オブジェクトを含む UserMessage オブジェクトがいくつかあります。

ユーザーメッセージ

@Entity
public class UserMessage implements Serializable {

  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue
  private Long id;

  @Version
  private Integer version = 0;

  @ManyToOne
  @JoinColumn(name = "messageId")
  private Message message;

  private String user;

  private int priority;

  private boolean read;

  private Date expiry;

  private boolean sent;

  ... getter/setters etc

メッセージ

  @Entity(name = "UUMessage")
  public class Message implements Serializable {

  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue
  private Long id;

  @Version
  private Integer version = 0;

  private String title;

  private String mimeType;

  private String message;

  private Date received;

  private String fromUser;

  public Message() {

  }

  ... getter/setters etc

それぞれ独自のプロキシ クラスを持つ

UserMessageProxy

@ProxyFor(value = UserMessage.class, locator = UserMessageLocator.class)
public interface UserMessageProxy extends EntityProxy {

  Long getId();

  void setId(Long id);

  MessageProxy getMessage();

  void setMessage(MessageProxy message);

  String getUser();
}

メッセージプロキシ

@ProxyFor(value = Message.class, locator = MessageLocator.class)
public interface MessageProxy extends EntityProxy {

Long getId();

void setId(Long id);

String getTitle();

void setTitle(String title);

}

工場とコンテキストがあります

@Service(value = CentralNotificationService.class, locator = CentralNotificationServiceLocator.class)
public interface CnsRequestContext extends RequestContext {

  Request<List<UserMessageProxy>> getMessagesForUser(String user, int start, int length);

}

クライアントで getMessagesForUser(...) を呼び出すと、サーバー側のサービス コードが呼び出され、データベース内のエントリが取得され、UserMessageProxy のリストがクライアントに返されます。残念ながら、これらのいずれかで getMessage() を呼び出すと null が返され、その理由がわかりません。

エラーや警告は表示されません。サーバー側では、RequestFactory コードがサービス クラスを呼び出したときに、UserMessage に Message オブジェクトが含まれていることを「確認」できます。

オブジェクトが null になるのはなぜですか? 満たされていない条件はありますか?

GWT 2.4 BTW (ただし、2.3 でも問題がありました)

4

1 に答える 1

6

あなたのコードにはおそらく次のものがありません.with("message")

サーバーにクエリを実行するとき、RequestFactory はオブジェクト グラフにリレーションを自動的に設定しません。これを行うには、リクエストで with() メソッドを使用し、関連するプロパティ名を String として指定します
[…]
また、ValueProxy を拡張するタイプのプロパティを取得するには with() メソッドを使用する必要があります。with() メソッドは複数の String 引数を取るため、一度に複数のプロパティ名を指定できます。ネストされたプロパティを指定するには、ドット表記を使用します。

ソース: http://code.google.com/webtoolkit/doc/latest/DevGuideRequestFactory.html#relationships

于 2011-09-19T16:12:14.187 に答える