Я пытался расширить объект Customer в своем приложении на основе DemoSite 5.0.1-GA. Я расширил оригинальный интерфейс клиента и класс CustomerImpl. Затем добавили мой класс CustomerImpl в persistence-core.xml и applicationContext-entity.xml в основной проект, переопределив компонент bean с идентификатором «org.broadleafcommerce.profile.core.domain.Customer».Как расширить клиентскую организацию Broadleaf Commerce?
Я мог бы успешно расширить объект заказа этими шагами. Но для объекта Customer я обнаружил, что всегда получаю экземпляр org.broadleafcommerce.profile.core.domain.CustomerImpl, будь то в относительных объектах, таких как Order или непосредственно получить «org.broadleafcommerce.profile.core.domain.Customer «bean из контекста Spring, но не экземпляр моего расширенного класса, как ожидалось.
Вот мой ApplicationContext-entity.xml, я опустил атрибуты <beans>
элемента:
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="org.broadleafcommerce.core.order.domain.Order" class="com.ddklife.core.ecommerce.domain.OrderImpl" scope="prototype"/>
<bean id="com.ddklife.core.autovending.domain.MachineChannel" class="com.ddklife.core.autovending.domain.MachineChannelImpl" scope="prototype"/>
<bean id="com.ddklife.core.autovending.domain.OrderChannelXref" class="com.ddklife.core.autovending.domain.OrderChannelXrefImpl" scope="prototype"/>
<bean id="org.broadleafcommerce.profile.core.domain.Customer" class="com.ddklife.core.customer.domain.CustomerImpl" scope="prototype"/>
</beans>
А вот мой расширенный класс CustomerImpl, я опустил все геттеры/сеттеры методы:
package com.ddklife.core.customer.domain;
@Entity(name = "DdlCustomer")
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "DDL_CUSTOMER")
@NamedQueries({
@NamedQuery(name="DD_READ_CUSTOMER_BY_WECHATOPENID", query="from DdlCustomer c where weChatOpenId = :weChatOpenId")
})
public class CustomerImpl extends org.broadleafcommerce.profile.core.domain.CustomerImpl implements Customer {
private static final long serialVersionUID = 1L;
@Column(name = "DDLIFE_POINTS")
protected Long ddlifePoints;
@Column(name = "WECHAT_OPEN_ID")
protected String weChatOpenId;
}
И вот мой расширенный класс OrderImpl, который может быть правильно загружен из относительных объектов или с использованием метода весеннего контекста getBean
:
package com.ddklife.core.ecommerce.domain;
@Entity(name = "DdlOrder")
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "DDL_ORDER")
public class OrderImpl extends org.broadleafcommerce.core.order.domain.OrderImpl implements Order {
private static final long serialVersionUID = 1L;
@Column(name = "STORE_TYPE")
protected String storeType;
@Column(name = "STORE_ID")
protected Long storeId;
@Column(name = "PAYMENT_QRCODE_URL")
protected String paymentQrcodeUrl;
@OneToMany(fetch = FetchType.LAZY, targetEntity = OrderChannelXrefImpl.class, mappedBy = "order", orphanRemoval = true,
cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
protected List<OrderChannelXref> allChannelXrefs = new ArrayList<OrderChannelXref>();
}
Привет phillipuniverse, я отправил мой ApplicationContext-entity.xml ирасширенный класс CustomerImpl в моем исходном вопросе. Мне интересно, почему я мог успешно расширить OrderImpl так же, но не удалось в CustomerImpl. Спасибо за вашу помощь! – Lunastone
Можете ли вы установить контрольную точку в CustomerDaoImpl.create() и посмотреть, что произойдет, когда вы перейдете на сайт в режиме инкогнито или после очистки ваших файлов cookie? Вы должны увидеть, что там создается новый клиент. Является ли это еще одним клиентом Broadlaf CustomerImpl или вашей версией CustomerImpl? – phillipuniverse