接着(一)
3: <id>
**** hibernate 使用对象标识符(OID)来建立内存中的对象(eg:一个对象实例,一条数据库记录)和数据库表中记录的对应关系,对象的OID和数据表的主键对应,HIbernate通过标识符生成器来为主键赋值
推荐在数据表中使用代理主键(不具备业务含义的字段)代理主键通常为整数类型,因为整数类型比字符串类型要节省更多的数据库空间
在对象-关系映射文件中,<id>元素用来设置对象标识符,<generator>子元素用来设定标识符生成器。
hibernate提供了标识符生成器接口:IdentifierGenerator,并提供了各种内置实现,一般直接用实现就行,自己不去定义实现这个接口;
generator 详细见主键生成策略
4:<property>
---name:持久化类的属性名
---column:列名数据库的字段名,若没设置,属性名就是字段名
---type:hibernate映射类型(可达到精确映射);是java类型与sql类型的桥梁,若没设置,hibernate会运用,反射机制先识别出持久化类的特定属性的java类型,然后自动使用与之对应的默认的hibernate映射类型
---index:为此字段添加索引
---not-null:是否允许为空
---access:hibernate的默认属性访问策略;默认值为property(即使用getter,setter方法来访问属性);若指定field,则hibernate会忽略getter/setter方法,而通过反射访问成员变量
---unique:是否为该属性的所映射的数据列添加唯一约束
---update:该字段是否可以被修改(通过测试才可拿得到)
---length:长度
---formula:用来设置sql表达式的,hibernate将根据它来计算出派生属性的值
---派生属性:并不是持久化类的所有属性都直接和表的字段匹配,持久化类的有些属性的值必须在运行时通过计算才能得出来
****使用formula="(sql)"的英文括号不能少
****Sql表达式中的列名和表名都应该和数据库对应,而不是和持久化对象的属性对应
****如果需要在formula属性中使用参数,这直接使用where cur.id=id形式,其中
id就是参数,和当前持久化对象的id属性对应的列的id值将作为参数传入
****如果映射文件的property里的type是日期类型那么可选三种
《在java中代表时间和日期的类型包括:java.util.Date,java.util.Calendar;
在JDBC API 中还提供了3个扩展了java.util.Date 类的子类:
(1):java.sql.Date,(2)java.sql.Time,(3)java.sql.Timestamp
这三个类分别和标准sql类型中的DATE(日期),TIME(时间)和TIMESTAMP (时间戳,同时包含日期和时间信息)类型对应
正因为java.util.Date是其他三个的父类,所以java.util.Date 可以对应标准sql中的DATE,TIME和TIMESTAMP,所以持久化类的Date类型设置为java.util.Date
那如何来映射成date.time.timestamp?
(以上不是sql,也不是java,而是hibernate映射类型)
》