时间戳
使用时间戳,是通过最后修改时间来判断是否来做更新操作,也就是只有在最后更新时间之后的更新操作才会执行。
写在Xxxxx.hbm.xml中
<timestamp name="updateTime" column="updatetime"/>
例:
public class User implements Serializable{
private int id;
private String name;
private String phone;
private Timestamp updateTime;//时间戳属性,记录最后修改的时间
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getPhone(){
return phone;
}
public void setPhone(String phone){
this.phone = phone;
}
public Timestamp getUpdateTime(){
return updateTime;
}
public void setUpdateTime(Timestamp updateTime){
this.updateTime = updateTime;
}
}
使用时间戳的User类的User.hbm.xml文件
<hibernate-mapping package="alan.hbn.concur.timestamp" auto-import="false">
<class name="User" table="user_ts">
<id name="id" column="id" type="integer" unsaved-value="0">
<generator class="native"/>
</id>
<timestamp name="updateTime" column="updatetime"/>
<!--指定时间戳属性对应的字段-->
<property name="name" column="name"/>
<property name="phone" column="phone"/>
</class>
</hibernate-mapping>
类继承关系映射
建表策略
1) 所有类建一个表
2) 只为具体类建表
3) 每个类建一个表。
1) 所有类只建一个表,查寻效率比较高,但是会产生很多空间浪费,当子类中的非空约束,就不大适用了,这是对于子类可以使用subclass标签表示。
2) 只为具体类建表,使用于不使用多态的情况下,具体类之间没有继承关系时适用
需要针对每个类写映射配置文件,就和普通的单表映射的xml文件相同。
也可以使用一个xml文件来进行映射,可以通过写union-subclass标签来表现其关系
这里不能使用id生成策略中的native,而是要指定特定的生成策略。
3) 每个类建一个表,可以有效减少数据的冗余,减少字段,查询效率不很高。
正对每个类建一个表,只要写一个配置文件来进行类的映射即可
映射文件中的子类可以使用join-subclass标签来表示,并且引用父类的主键作为共享主键,就是不需要指定id生成策略
注意:
不考虑多态时,最好是用只针对具体类建表,而考虑多态时尽量使用所有类建一个表,只有当子类中的属性过多是才考虑每个类建一个表的策略。
例:
Computer类,是抽象类,是父类
public abstract class Computer{
private int id;
private int price;
private String manufacturer;
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
public String getManufacturer(){
return manufacturer;
}
public void setManufacturer(String manufacturer){
this.manufacturer = manufacturer;
}
public int getPrice(){
return price;
}
public void setPrice(int price){
this.price = price;
}
}
子类台式机 Desktop类
public class Desktop extends Computer{
private boolean isLCD;
public boolean isLCD(){
return isLCD;
}
public void setLCD(boolean isLCD){
this.isLCD = isLCD;
}
}
子类笔记本电脑 Notepad类
public class Notepad extends Computer{
private float weight;
private float thickness;
public float getThickness(){
return thickness;
}
public void setThickness(float thickness){
this.thickness = thickness;
}
public float getWeight(){
return weight;
}
public void setWeight(float weight){
this.weight = weight;
}
}