4,根据底层数据库指定生成方法
<id name="id" column="id">
<generator class="native"/>
</id>
注意,在使用native的底层是针对Oracle数据库时,id的生成方式还是使用sequence,只不过需要一个特定名字的sequence,"hibernate_sequence"。
5,高低位算法
<id name="id" column="id">
<generator class="hilo">
<param name="table">high_value</param>
<!--设置高位值取值的表-->
<param name="column">next_value</param>
<!--设置高位值取值的字段-->
<param name="max_lo">50</param>
<!--指定低位最大值,当取道最大值是会再取一个高位值再运算-->
</generator>
</id>
类关联关系映射
一对一关系实现
建表策略
1,共享主键,也就是一方引用另一方的主键,作为自身的主键,也是外键。
2,外键引用,也就是一方引用另一方的主键,作为外键,并且对引用的外键加唯一约束。
以User和Address类为例,用户和用户的地址是一对一关系
User类
package alan.hbn.rel.o2o;
import java.io.Serializable;
public class User implements Serializable{
private int userId;
private String userName;
private Address address;
public int getUserId(){
return userId;
}
public void setUserId(int userId){
this.userId = userId;
}
public String getUserName(){
return userName;
}
public void setUserName(String userName){
this.userName = userName;
}
public Address getAddress(){
return address;
}
public void setAddress(Address address){
this.address = address;
if (address != null){
address.setUser(this);
}
}
}
Address类
package alan.hbn.rel.o2o;
import java.io.Serializable;
public class Address implements Serializable{
private int addressId;
private String street;
private String zipcode;
private User user;
public int getAddressId(){
return addressId;
}
public void setAddressId(int addressId){
this.addressId = addressId;
}
public String getStreet(){
return street;
}
public void setStreet(String street){
this.street = street;
}
public String getZipcode(){
return zipcode;
}
public void setZipcode(String zipcode){
this.zipcode = zipcode;
}
public User getUser(){
return user;
}
public void setUser(User user){
this.user = user;
}
}