Hibernate知识辅导(4--2)

时间戳

 

使用时间戳,是通过最后修改时间来判断是否来做更新操作,也就是只有在最后更新时间之后的更新操作才会执行。

 

写在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;

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值