<property name="price">
<column name="price" sql-type="double"
not-null="true"/>
</property>
<property name="amount">
<column name="amount" sql-type="integer"
not-null="true"/>
</property>
</class>
</hibernate-mapping>
它非常简单且易于理解。几个细节特别令人感兴趣:
- <class name="test.hibernate.Product" table="products">,指出正在映射一个名为test.hibernate.Product的类到表products。
- <id>元素及其子元素,定义Java类与数据库之间的连接。
- <property>元素,定义每个字段存储到哪个列及其类型、名称等。
<generator class="uuid.hex"/>元素乍一看不太好理解。但是知道了它是<id>的一个子元素后,它的作用就很明显了:由于应用程序不知道它的数据如何被持久化(我们一直这么说),我们需要一个没有任何业务含义的代理键帮助Hibernate操纵对象。新创建的Products没有那个id,Hibernate将为我们创建它们。我们选择使用UUID字符串,但它提供了许多ID生成器(顺序的、限定范围的,甚至是用户指派的,等等),而且还可以编写自己的ID生成器。
现在,创建(复制、粘贴)Product.hbm.xml的内容,并把文件和test.hibernate.Product类放到同一个包内(例如,放置Product.java文件的目录),重新运行java test.InsertProduct Milk 100 1.99命令。现在我们看到更多的日志以及...没有其他东西了!它运行正常吗?在Session sess = sf.openSession(); 前和sess.close()后添加System.out.println(p),看一看Produc出了什么问题。重新运行程序。您将看到类似于如下内容的日志输出(ID数字肯定会不同的):
[Product] Milk(null) price=1.99 amount=100
[Product] Milk(40288081f907f42900f907f448460001) price=1.99 amount=100 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>
|