2016-09-16 4 views
0

J'essayais d'étendre l'entité Customer dans mon application basée sur DemoSite 5.0.1-GA. J'avais étendu l'interface originale du client et la classe CustomerImpl. Puis j'ai ajouté ma classe CustomerImpl dans persistence-core.xml et applicationContext-entity.xml dans le projet principal, en remplaçant le bean par l'identifiant "org.broadleafcommerce.profile.core.domain.Customer".Comment étendre l'entité client de Broadleaf Commerce?

Je pourrais étendre l'entité Order avec succès par ces étapes. Mais pour l'entité Client, j'ai trouvé que j'obtiendrais toujours une instance de org.broadleafcommerce.profile.core.domain.CustomerImpl, que ce soit dans des entités relatives comme Order ou que j'obtienne directement le "org.broadleafcommerce.profile.core.domain.Customer "Bean du contexte Spring, mais pas une instance de ma classe étendue comme prévu.

Voici mon applicationContext-entity.xml, je les attributs de omettais l'élément <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> 

Et voici ma classe CustomerImpl étendue, j'omis tous les getters/méthodes setters:

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; 

} 

Et voici ma classe OrderImpl étendue, qui a pu être chargée correctement à partir d'entités relatives ou en utilisant la méthode du contexte Spring 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>(); 

} 

Répondre

0

Pouvez-vous poster l'intégralité de votre applicationContext-entity.xml? Il devrait ressembler à ceci:

<bean id="org.broadleafcommerce.profile.core.domain.Customer" class="com.mycompany.core.MyCustomer" scope="prototype" /> 

choses qui pourraient se passer:

  1. Vous y avez obtenu des sessions actives qui avaient déjà un CustomerImpl Feuillu stocké avant votre override; essayez de vider tous vos cookies et d'essayer à nouveau
  2. Vous n'avez pas effectué l'installation mvn du projet principal avant de reconstruire le fichier de guerre 'site'. Lorsque vous créez le projet de site, vous devez vous assurer que le projet de base est également inclus. Vous pouvez le faire avec cette commande Maven de la racine:

    mvn Site -pl -Suis installation propre

qui assurera que le module « site » et ses dépendances (comme noyau) sont recréés

+0

Salut phillipuniverse, j'ai posté mon applicationContext-entity.xml et la Classe CustomerImpl étendue dans ma question initiale. Je me demande pourquoi j'ai réussi à étendre OrderImpl de la même manière mais échoué dans CustomerImpl. Merci de votre aide! – Lunastone

+0

Pouvez-vous définir un point d'arrêt dans CustomerDaoImpl.create() et voir ce qu'il se passe lorsque vous accédez au site en mode navigation privée ou après avoir effacé vos cookies? Vous devriez voir un nouveau client créé ici. Est-ce toujours un Broadleaf CustomerImpl ou votre version de CustomerImpl? – phillipuniverse

0

Vous devez ajouter votre nouvelle entité: /core/src/main/resources/META-INF/persistence-core.xml

<persistence-unit name="blPU" transaction-type="RESOURCE_LOCAL"> 
    ... 
    <class>com.mycompany.order.domain.MyOrderImpl</class> 
    ... 
</persistence-unit>