私は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>();
}
phillipuniverseこんにちは、私は私のApplicationContext-entity.xmlを掲載しているし、その私の元の質問のCustomerImplクラスを拡張しました。なぜ私はOrderImplを同じ方法で正常に拡張できたのだろうが、CustomerImplで失敗したのだろうかと思う。ご協力いただきありがとうございます! – Lunastone
CustomerDaoImpl.create()にブレークポイントを設定して、シークレットモードでサイトにアクセスしたとき、またはCookieをクリアした後の状況を確認できますか?新しい顧客がそこに作成されているのを確認する必要があります。それはまだBroadleaf CustomerImplかあなたのCustomerImplのバージョンですか? – phillipuniverse