锁定老帖子 主题:Hibernate知识辅导(4--2)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-03
时间戳
使用时间戳,是通过最后修改时间来判断是否来做更新操作,也就是只有在最后更新时间之后的更新操作才会执行。
写在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; } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 1263 次