2020-08-19 20:31发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,我看到saveAll将从当前modelContext中拉出所有模型(新模型和修改模型)。 所以我想知道modelContext是否是threadLocal对象。 因为如果modelContext不是threadLocal,那么saveAll也会将模型保存在其他地方。
这将导致意外的行为。 就像某些不应该保存的模型一样,它也会被保存。 有谁知道在这种情况下modelContext是如何工作的?
您好 Ryan Zheng ,
我知道这是旧帖子,但可以回答,这样可能会对其他人有所帮助。 例如:如下。
ProductModel product1 = new ProductModel();
ProductModel product2 = new ProductModel();
ProductModel product3 = modelService.create(ProductModel.class);
ProductModel product4 = modelService.create(ProductModel.class);
现在,modelService.saveAll()将仅保存product3和product4。 因为如果您使用工厂方法(即modelService.create(...))创建模型,则它们与模型上下文相关联,因此,如果您使用new运算符创建产品,则需要将它们显式关联到模型上下文。
您可以尝试这种方式,以便modelService.saveAll()不会保存您的对象。
如果要更新现有模型,则可以使用ModelService.lock(...)。
Hi 1998
模型上下文是线程本地的,模型不是线程安全的。
由于Model上下文仅绑定到Hybris Request Scope,与标准请求范围相似,但仅属于单个线程,因此我们可以说model Context仅是单线程而model是线程本地的,因此我们应该进行同步 访问设置器。
请参阅链接以获取更多详细信息:
https://wiki.hybris.com/display/release5/Models
因此,如果我们将模型传递给不同的线程(例如通过使用SessionService),则应该同步对setter的访问。
请告诉我这是否对您有帮助
最多设置5个标签!
您好 Ryan Zheng ,
我知道这是旧帖子,但可以回答,这样可能会对其他人有所帮助。 例如:如下。
ProductModel product1 = new ProductModel();
ProductModel product2 = new ProductModel();
ProductModel product3 = modelService.create(ProductModel.class);
ProductModel product4 = modelService.create(ProductModel.class);
现在,modelService.saveAll()将仅保存product3和product4。 因为如果您使用工厂方法(即modelService.create(...))创建模型,则它们与模型上下文相关联,因此,如果您使用new运算符创建产品,则需要将它们显式关联到模型上下文。
您可以尝试这种方式,以便modelService.saveAll()不会保存您的对象。
如果要更新现有模型,则可以使用ModelService.lock(...)。
Hi 1998
模型上下文是线程本地的,模型不是线程安全的。
由于Model上下文仅绑定到Hybris Request Scope,与标准请求范围相似,但仅属于单个线程,因此我们可以说model Context仅是单线程而model是线程本地的,因此我们应该进行同步 访问设置器。
请参阅链接以获取更多详细信息:
https://wiki.hybris.com/display/release5/Models
因此,如果我们将模型传递给不同的线程(例如通过使用SessionService),则应该同步对setter的访问。
请告诉我这是否对您有帮助
一周热门 更多>