gpt4 book ai didi

带有 Set 子集合的 GWT RequestFactory

转载 作者:行者123 更新时间:2023-12-04 22:05:02 25 4
gpt4 key购买 nike

关于 Set 形状的子集合的持久性,我对 RequestFactory 有一个小问题。我正在使用 2.5 与 , 以及后端的 Hibernate4/Spring3。我正在使用 通过 Spring 进行过滤,以便在我的 DAO 的保存方法中的 findByID 之后可以保留集合。我的问题是,当子集合基于 List 时,一切似乎都正常,但当它们基于 Set 时,并非所有来自客户端的项目都明显地到达服务器。

我的代码是这样的:

-根实体IndicationTemplate:

@Entity
@Table (name = "vdasIndicationTemplate")
@org.hibernate.annotations.Table ( appliesTo = "vdasIndicationTemplate", indexes =
{@Index (name = "xieIndicationTemplateCreateUser", columnNames= {"createUserID"}),
@Index (name = "xieIndicationTemplateModifyUser", columnNames= {"modifyUserID"})})
public class IndicationTemplate extends AbstractEditable <Integer> implements IEntity <Integer>, IDateable, IDescriptable {
//...
private Set <ProposalTemplate> proposalTemplates = null;
//...
@OneToMany (fetch = FetchType.LAZY, mappedBy = "indicationTemplate"
, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.DETACH})
public Set <ProposalTemplate> getProposalTemplates () {
return proposalTemplates;
}
public void setProposalTemplates (Set <ProposalTemplate> proposalTemplates) {
this.proposalTemplates = proposalTemplates;
}
//...
}

-子实体 ProposalTemplate 当然具有相反的 ManyToOne 映射,并且具有 3 个子集合以及具有 3 个不同实体的相同类型。

-根实体的客户端代理:

@ProxyFor (value = IndicationTemplate.class, locator = PersistenceEntityLocator.class)
public interface IIndicationTemplateProxy extends IEntityProxy, IDeletableProxy, IDescriptableProxy {
//....
Set <IProposalTemplateProxy> getProposalTemplates ();
void setProposalTemplates (Set <IProposalTemplateProxy> proposalTemplateProxy);
}

-在客户端,我呈现根实体的属性以及子实体的列表。然后用户可以更新它们,并将更改存储回集合中,如下所示:

   Set <IProposalTemplateProxy> newList = getElementsFromUiSomehow (); //these elements can be new or just the old ones with some changes
indicationTemplate.getProposalTemplates ().clear ();
indicationTemplate.getProposalTemplates ().addAll (newList);

-然后在某个时候:

   requestContext.saveIndicationTemplate ((IIndicationTemplateProxy) entityProxy)
.fire (new Receiver <IIndicationTemplateProxy> ()

-RequestContext 看起来像这样:

@Service (value = TemplateService.class, locator = SpringServiceLocator.class)
public interface ITemplateRequestContext extends RequestContext {
/** saves (creates or updates) one given indication template */
Request <IIndicationTemplateProxy> saveIndicationTemplate (IIndicationTemplateProxy indicationTemplate);
//....
}

问题是每个请求仅将 1 个子实体添加到收集服务器端。例如,indicationTemplate 有 2 个 proposalTemplates,我再添加 4 个,然后在服务器端 saveIndicationTemplate 实体只包含 3 个而不是 6 个。如果发生,无论我之前有多少个实体以及我添加了多少个,我只得到 1在服务器上比以前更多。我确实在触发 requestContext 方法之前检查了代理对象,它已完全加载,包括它的所有子对象。最后最奇怪的是,如果我替换 Set per List(以及所有后续更改),一切正常!

当使用 Sets 而不是 Lists 时,为什么 RF 无法将所有更改传输到服务器会不会有什么问题??顺便说一句,在这种情况下我确实更喜欢 Sets,所以这就是我问的原因。

有人吗?

感谢您的帮助!

最佳答案

我假设您遇到了这个错误。这是一个已知的 gwt 错误,但仍未修复。

https://code.google.com/p/google-web-toolkit/issues/detail?id=6354&q=set&colspec=ID%20Type%20Status%20Owner%20Milestone%20Summary%20Stars

尝试使用 list 而不是 set,应该没问题。

关于带有 Set 子集合的 GWT RequestFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14359442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com