电商系统Broadleaf文档翻译(七) – 扩展实体extending entities
来源:互联网 发布:阿里企业邮箱端口 编辑:程序博客网 时间:2024/06/06 02:51
原文标题:main services
原文出处:http://www.broadleafcommerce.com/docs/core/current/broadleaf-concepts/data-and-service-models/extending-entities
译者:IT十年
译文链接:http://www.ittenyear.com/394/broadleaf-extending-entities/
本译文仅用于学习和交流目的,转载请保留原文链接和译文链接!
原文出处:http://www.broadleafcommerce.com/docs/core/current/broadleaf-concepts/data-and-service-models/extending-entities
译者:IT十年
译文链接:http://www.ittenyear.com/394/broadleaf-extending-entities/
本译文仅用于学习和交流目的,转载请保留原文链接和译文链接!
有时候,BLC提供的实体不能满足你的需要。比如,对于特殊的业务逻辑,你可能需要以特殊的方式表示一个订单ID,这个ID和BLC的内部订单ID不兼容。在这种情况下,应该在订单类中添加一个新的字段,这个字段可以保存你生成的满足你的需要的订单ID。要实现这个目标,就要扩展实体。
让我们从实现一个自定义的实体范例MyOrderImpl开始。
@Entity
@Table(name = "MY_ORDER")
public class MyOrderImpl extends OrderImpl {
private static final long serialVersionUID = 1L;
@Column(name = "MY_ORDER_ID")
private String myOrderId;
... getters / setters / equals / hashcode ...
}
我们创建了一个新的自定义实体,他继承了BLC的OrderImpl 实体。我们给实体添加了自定义的订单ID字段myOrderId,通过JPA的注解,我们把这个实体和字段与数据库中的表和列绑定在一起。
注:BLC中所有的实体扩展都使用标准的JPA策略。
如果你知道怎么使用JPA,那你就知道怎么使用并扩展BLC实体。当然,你需要一张非安全模式(参阅数据库模型)下的数据库表MY_ORDER来支持你的实体。表里有一个能保存long型数据的字段ORDER_ID(这个字段是你的新表和BLC订单表的关联字段),还有一个VarChar 类型的字段MY_ORDER_ID,它保存你的自定义订单ID。
因为我们创建了扩展的实体,所以要把实体和它的实例化方式告知BLC:在应用程序上下文中添加一个bean配置:
<bean id="org.broadleafcommerce.core.order.domain.Order" class="com.mycompany.order.domain.MyOrderImpl" scope="prototype"/>
最后,把新的实体类添加到persistence.xml文件的持久化单元配置中,像这样:
<persistence-unit name="blPU" transaction-type="RESOURCE_LOCAL">
...
<class>com.mycompany.order.domain.MyOrderImpl</class>
...
</persistence-unit>
关于在BLC程序中配置持久化的更多信息,请参阅持久化配置部分。
这是在BLC中使用自定义实体的最简单的配置。配置完成后,每当需要一个新的订单实例时,BLC就会创建一个MyOrderImpl 的实例。
这种实现方法过于简单,他的唯一问题是,虽然实体可以实例化,但是myOrderId 字段却不会赋值。对很多自定义的字段类型来说,可能这样满足要求,但在这个例子里,我们希望myOrderId 字段可以立即赋值。那么我们看一下有什么办法可以解决这个问题。
a、重写OrderDaoImpl 的create()方法,添加一段设置自定义订单ID的代码(这种方法和扩展服务很类似,可以参阅服务扩展指南)。
b、在MyOrderImpl的spring配置中,为myOrderId 字段添加一个工厂bean。
如果可以的话,推荐使用工厂bean方式,因为可以和BLC保持松耦合。怎么做呢,从工厂bean开始:
public class MyOrderIdFactoryBean implements FactoryBean {
public Object getObject() throws Exception {
String myOrderId = null;
//TODO add some code to create the custom order id
return myOrderId;
}
public Class getObjectType() {
return String.class;
}
public boolean isSingleton() {
return false;
}
}
这个简单地工厂bean只是给spring提供一个对象实例以及该对象的类型:一个String类型的自定义订单id。
然后,为新的ID生成工厂添加配置。
<bean id="org.broadleafcommerce.core.order.domain.Order" class="com.mycompany.order.domain.MyOrderImpl" scope="prototype">
<property name="myOrderId">
<bean class="com.mycompany.order.service.MyOrderIdFactoryBean"/>
</property>
</bean>
上面的代码中,我们用一个稍微复杂的bean定义替换了原来的bean,加入了工厂bean。当BLC向Spring请求一个订单Order实例时,就可以得到一个MyOrderImpl 实例,它有一个通过MyOrderIdFactoryBean赋值的myOrderId 字段。
0 0
- 电商系统Broadleaf文档翻译(七) – 扩展实体extending entities
- 电商系统Broadleaf文档翻译(九) – 扩展的服务extending services
- 电商系统Broadleaf文档翻译(六) - 主要实体main entities
- 电商系统Broadleaf文档翻译(八) – 主要服务main services
- 电商系统Broadleaf文档翻译(一) - 逻辑架构Logical Architecture
- 电商系统Broadleaf文档翻译(二) - 推荐服务器配置server configuration
- 电商系统Broadleaf文档翻译(三) - 应用架构模块视图application architecture module view
- 电商系统Broadleaf文档翻译(四) - 应用架构组件视图application architecture component view
- 电商系统Broadleaf文档翻译(五) - 架构图表architecture diagrams
- broadleaf电商文档翻译 特点和体系结构
- broadleaf电商文档翻译 项目模块和封装结构
- broadleaf电商文档翻译 Merge Configuration 合并配置
- Broadleaf电商系统开发(一) - Broadleaf介绍
- 10003--- Broadleaf电商系统开发(一) - Broadleaf介绍
- Broadleaf电商系统开发(三) - 汉化
- Broadleaf电商系统开发(二) - 启动项目
- Broadleaf电商系统开发(四) - 切换到mysql
- Broadleaf电商系统开发(五) - Http Api
- 浅析三层架构与MVC模式的区别
- 解决webview内存问题
- 同步异步
- nyist 组合数
- nil null Nil 的区别
- 电商系统Broadleaf文档翻译(七) – 扩展实体extending entities
- C++的4种类型转换关键字及其特点
- 12306 2.2版本SO的分析和修复
- ZOJ 3844 Easy Task(模拟+哈希 | 暴力)
- 关于intern()方法
- 第二周项目4【2】-用循环求
- ADO几种数据库连接方式
- 正则表达式三 (修正模式)
- shell之网络相关配置文件