<!-- Product has reference to ProductGroup, many products may reference same group --> <field name="group" type="myapp.ProductGroup"> <sql name="group_id" /> </field>
<!-- Product has reference to ProductDetail many details per product --> <field name="details" type="myapp.ProductDetail" required="true" collection="vector"> <sql many-key="prod_id"/> </field>
<!-- Product has reference to Category with many-many relationship --> <field name="categories" type="myapp.Category" required="true" collection="vector"> <sql name="category_id" many-table="category_prod" many-key="prod_id" /> </field> </class>
短事务 vs. 长事务 Castor 中正常的事务被称为短事务。Castor 还提供了长事务这一概念,长事务由两个短事务组成。我们可以使用一个典型的 Web 应用程序来理解两种类型的事务之间的差异。对需要从数据库读取数据、将数据显示给用户然后把数据提交给数据库的应用程序来说,我们查看有可能冗长的事务时间(这对于 Web 应用程序是很典型的)。但不能在数据库中无限地保持写锁。为了解决这一问题,Castor 利用了两个短事务。例如,第一个短事务使用只读查询来具体化对象,这让您可以在不打开事务就显示对象。假如用户做了更改,则启动第二短个事务,update() 方法将更改过的对象带入事务的上下文。清单 5 是一个长事务的示例。