2016-09-16 14 views
0

私はDemoSite 5.0.1-GAに基づいてアプリケーション内のCustomerエンティティを拡張しようとしていました。元のカスタマーインターフェースとCustomerImplクラスを拡張しました。 CustomerImplクラスをコアプロジェクトのpersistence-core.xmlとapplicationContext-entity.xmlに追加し、idが "org.broadleafcommerce.profile.core.domain.Customer"のBeanをオーバーライドします。ブロードリーフコマースのカスタマーエンティティを拡張するにはどうすればよいですか?

これらの手順でOrderエンティティを正常に拡張できます。しかし、Customerエンティティでは、Orderのような相対エンティティであっても、org.broadleafcommerce.profile.core.domain.Customerを直接取得しても、常にorg.broadleafcommerce.profile.core.domain.CustomerImplのインスタンスを取得することがわかりました。 "SpringコンテキストからのBeanですが、拡張クラスのインスタンスは期待どおりではありません。ここで

は私の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 Springコンテキストのメソッドを使用しています:

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>(); 

} 

答えて

0

applicationContext-entity.xmlの全体を投稿できますか?それは次のようになります。上に行くことができ

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

物事:あなたは既に広葉樹CustomerImplをオーバーライドする前に、そこに保存されていたアクティブなセッションを持っている

  1. を。すべてのCookieをクリアしてもう一度試してみてください
  2. 「サイト」warファイルを再構築する前に、コアプロジェクトのmvnインストールを実行しませんでした。サイトプロジェクトを構築するには、コアプロジェクトも含まれていることを確認する必要があります。あなたはルートからこのMavenのコマンドでこれを行うことができます:クリーンインストール-AM

    MVN -plサイト「サイト」モジュールと(コアのような)その依存関係が

    を再構築していることを確認します

あなたは、あなたに新しいエンティティを追加する必要が

+0

phillipuniverseこんにちは、私は私のApplicationContext-entity.xmlを掲載しているし、その私の元の質問のCustomerImplクラスを拡張しました。なぜ私はOrderImplを同じ方法で正常に拡張できたのだろうが、CustomerImplで失敗したのだろうかと思う。ご協力いただきありがとうございます! – Lunastone

+0

CustomerDaoImpl.create()にブレークポイントを設定して、シークレットモードでサイトにアクセスしたとき、またはCookieをクリアした後の状況を確認できますか?新しい顧客がそこに作成されているのを確認する必要があります。それはまだBroadleaf CustomerImplかあなたのCustomerImplのバージョンですか? – phillipuniverse

0

:/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> 
関連する問題