1、单一主键
assigned 由java应用程序负责生成(手工赋值)。
native 由底层数据库自动生成标示符,如果是Mysql就是increament,如果是Oracle就是sequence,等等。
在这里我们尝试使用第一种但是赋值的时候不添标示属性值
public void testSaveUser()
{
//生成用户对象
//User user=new User(1,"txr","123");
User user =new User();
user.setPassword("123");
user.setUsername("txr");
session.save(user);//保存对象
}
发现代码居然通过了,但是查看数据库发现ID是0,这是由于id是int类型默认值为0并不是hibernate为它自动添加了主键值。但如果你再添加一次id还是没有赋值为0那么就会报主键冲突的错误。而如果把User.hbm.xml的主键属性自动生成改为native则测试会通过因为主键自动生成。
<id name="id" type="int">
<column name="ID" />
<!-- <generator class="assigned" /> -->
<generator class="native" />
</id>
2、基本类型
当你想修改属性类型为某种映射类型时只需要修改对应的属性映射值即可,如:
<!-- <property name="birthday" type="java.util.Date"> -->
<property name="birthday" type="date">
<column name="BIRTHDAY" />
</property>
3、对象类型
注意:Mysql不支持标准SQL的CLOB类型,在Mysql中,用TEXT,MEDIUMTEXT及LONGTEXT类型来表示长度超过255的长文本数据。
4、组件属性
组件属性是指:实体类中的某个属性属于用户自定义的类的对象。
5、单表操作CRUD实例
save
update
delete
get/load(查询单个记录)
get与load的区别:
在不考虑缓存的情况下,get方法会在调用之后立即向数据库发出sql语句,返回持久化对象。
load方法会在调用后返回一个代理对象。
该代理对象只保存了实体对象的id,直到使用对象的非主键属性时才会发出sql语句。
查询数据库不存在的数据时,get方法返回null,load方法抛出异常org.hibernate.ObjectNotFoundException