|
|
|
关于内嵌对象(Embedded Object)缓存设计的问题
|
2008年04月23日 13:14
|
|
|
标签列表
|
|
我在修改jpetstore这个项目时,发现如果用户查询自己以前的订单时,需要查询Item,所以我想让Item成为成为order.LineItem的内嵌对象的,这时就想到了用banq老师讲内嵌对象缓存设计的问题,我是这样用的 我先说原来没有用内嵌对象时的设计: Class OrderSqlMapDao{ ........... public Order getOrder(int orderId) throws SQLException { Order order = null; Object parameterObject = new Integer(orderId); order = (Order) sqlMapDaoTemplate.queryForObject("getOrder", parameterObject); List lineItems = sqlMapDaoTemplate.queryForList( "getLineItemsByOrderId", new Integer(order.getOrderId())); Iterator it = lineItems.iterator(); while (it.hasNext()) { LineItem lineItem = (LineItem) it.next(); parameterObject = lineItem.getItemId(); lineItem.setItem((Item) sqlMapDaoTemplate.queryForObject("getItem", parameterObject)); } order.setLineItems(lineItems); return order; } .............. } [该贴被sdaucs于2008-04-23 13:15修改过]
|
|
|
|
|
|
关于内嵌对象(Embedded Object)缓存设计的问题
|
2008年04月23日 13:22
|
|
|
然后我又用了内嵌设计 下面修改的OrderServiceImp类 Class OrderServiceImp{ ............... private ProductManager productManager; .............. public Order getOrder(Integer orderId) { Order order = null; try { order = orderDao.getOrder(orderId); // 内嵌对象(Embedded Object)缓存设计 Iterator it = order.getLineItems().iterator(); while (it.hasNext()) { LineItem lineItem = (LineItem) it.next(); Item item = productManager.getItem(lineItem.getItemId()); lineItem.setItem(item); }
} catch (Exception daoe) { Debug.logError(" Dao error : " + daoe, module); } return order; } ............ }
下面是OrderSqlMapDao类 Class OrderSqlMapDao{ ............. public Order getOrder(int orderId) throws SQLException { Order order = null; Object parameterObject = new Integer(orderId); order = (Order) sqlMapDaoTemplate.queryForObject("getOrder", parameterObject); List lineItems = sqlMapDaoTemplate.queryForList( "getLineItemsByOrderId", new Integer(order.getOrderId())); order.setLineItems(lineItems); return order; } .............. }
可是从jboss的控制台上看,item还是没有缓存!我也不知道是怎么回事!
|
|
|
|
|
|
回复:关于内嵌对象(Embedded Object)缓存设计的问题
|
2008年04月24日 09:08
|
|
|
你新增的Item 需要缓存有两个条件: 1. item实现modelif接口
2. 需要客户端单独对item的get获取。在这种情况下,缓存机制发挥作用,item在缓存内,但是如果你在Order中也有一份item,那么要保证这两个item是同一个,否则乱了。这是我提出内嵌对象的目的。
[该贴被banq于2008-04-24 09:08修改过]
|
|
|
|
|
|
回复:回复:关于内嵌对象(Embedded Object)缓存设计的问题
|
2008年04月24日 11:53
|
|
|
1. item继承了model类 2. item也在jdonframework.xml里面配置了
首先查询items的时候,已经将item缓存了, 然后当查询order的时候,需要调用item这个缓存,但是通过jboss控制台,我看到好像系统有查询了一次item,并重新缓存了.我也不知道是怎么回事!
|
|
|
|