在我的应用程序中,我的实体都来自单个实体。我希望能够拉动这个实体,对这个实体(包括它的子女)进行任何修改,然后坚持这个实体并将这些修改级联 - 但是我的基本测试失败了。GWT RequestFactory - 对儿童实体的持续变化
这是我说我拉的一个实例,并修改主要实体:
@Entity
@Component
public class Submission extends EntityAbstract implements IsSerializable
{
...
/** List of statements in this submission. */
@OneToMany(cascade=CascadeType.ALL, mappedBy="parentSubmission")
@NotNull
@Valid
private List<Statement> statements = new LinkedList<Statement>();
...
的Statement
和Submission
类都包含一个本地化的名称。这是我的测试场景,我拉Statement
实体我想要的,并尝试进行修改:
...
// Custom request context method for Submission:
InstanceRequest< SubmissionProxy, SubmissionProxy > persist();
...
RequestFactory.getTest().get(1L).with(Submission.PropertiesALL).fire(new Receiver<SubmissionProxy>()
{
@Override
public void onSuccess(final SubmissionProxy immutableResponse)
{
final Test context = RequestFactory.getTest();
final SubmissionProxy submission = context.edit(immutableResponse);
System.out.println("received: " + submission.getLocalizedName() + ", " + submission.getStatements().get(0).getLocalizedName());
// Make some modifications:
submission.setLocalizedName("submission-" + ((char)(Random.nextInt(26) + 'A')));
submission.getStatements().get(0).setLocalizedName("statementzzz");
System.out.println("persisting: " + submission.getLocalizedName() + ", " + submission.getStatements().get(0).getLocalizedName());
context.persist().using(submission).with(Submission.PropertiesALL).fire(new Receiver<SubmissionProxy>()
{
@Override
public void onSuccess(final SubmissionProxy immutableSubmission)
{
System.out.println("success: " + submission.getLocalizedName() + ", " + immutableSubmission.getStatements().get(0).getLocalizedName());
}
});
}
});
我测试的结果显示:
received: submissionzzz, statement-name // Called before making modifications [client]
persisting: submission-E, statementzzz // Called before persisting changes [client]
server: submission-E, statement-name // Called before persisting changes [server]
success: submission-E, statement-name // Called after persisting changes [client]
因此改变主要实体,Submission
正在被保留并正确地序列化到服务器。但是对子项属性的更改Statement
未被序列化到服务器,因此持久性不正确!
编辑:
我还一直没能解决的问题,所以我创建了一个问题,与GWT:https://code.google.com/p/google-web-toolkit/issues/detail?id=8368&q=requestfactory&colspec=ID%20Type%20Status%20Owner%20Milestone%20Summary%20Stars。该文章包含有关序列化/反序列化对象的信息,并包含请求工厂实例发送/接收的实际有效载荷。
它看起来好像负载和序列化在它离开客户端之前是正确的,并且一旦它在服务器端收到子数据丢失。
年底提出的一个情况跑去,我按照有关接收实体,编辑,应用的变化,并持续指定的指导方针。在这篇文章中,我没有看到有关父/子关系或请求工厂对象图的任何特定信息。不过,我很欣赏这种努力。 –
在文章的最后,有一个部分,** VI)更复杂的陷阱**,看看那里... –
我必须早先阅读过该部分,但它没有解决问题。我已经尝试使用更新后的子对象调用“setChild”,并单独编辑子对象,但没有运气。 –