Hybris问题:无法创建继承ProductModel的ProductBundle项类型
1. 修正items.xml的继承配置
Hybris的itemtype定义里,extends属性需要指定父item type的code,而非Java Model类名。你之前写的extends="ProductModel"是错误的,应该改为继承Product(Product对应的Model类就是ProductModel,生成的ProductBundleModel会自动继承ProductModel):
<itemtype code="ProductBundle" autocreate="true" generate="true" extends="Product"> <attributes> <attribute qualifier="bundlePrice" type="java.lang.Double"> <persistence type="dynamic" attributeHandler="bundlePriceAttributeHandler"/> </attribute> </attributes> </itemtype>
配置修正后,Hybris会自动生成ProductBundleModel类,它会正确继承ProductModel,而非仅继承Jalo类。
2. 调整动态属性处理器的泛型类型
因为动态属性bundlePrice属于ProductBundleModel,所以处理器的泛型应该指定为ProductBundleModel(如果需要兼容所有Product子类,也可以用AbstractProductModel),确保符合AbstractDynamicAttributeHandler的类型边界要求:
import de.hybris.platform.servicelayer.model.abstractitem.AbstractDynamicAttributeHandler; import your.package.model.ProductBundleModel; public class BundlePriceAttributeHandler extends AbstractDynamicAttributeHandler<Double, ProductBundleModel> { @Override public Double get(final ProductBundleModel model) { // 实现属性的获取逻辑 return calculateBundlePrice(model); } @Override public void set(final ProductBundleModel model, final Double value) { // 实现属性的设置逻辑(如果需要) } private Double calculateBundlePrice(ProductBundleModel model) { // 自定义计算逻辑 return 0.0; } }
错误原因解析
第一个错误:
type argument ProductModel is not within bounds of type-variable MODEL
本质是你的ProductBundleModel没有正确继承ProductModel(因items.xml继承配置错误),导致处理器的泛型类型与实际使用的Model类型不匹配,类型边界不满足。修正items.xml后,ProductBundleModel正确继承ProductModel,再调整处理器泛型即可解决。第二个错误:
YComposedType due to missing super type 'ProductModel'
Hybris的item type系统中不存在名为ProductModel的item type,extends属性只能识别item type的code(比如Product),而非Java类名,因此会提示找不到父类型。
内容的提问来源于stack exchange,提问作者Hero Hamada

