《Hibernate学习笔记二》:表与实体类的映射方法

来源:互联网 发布:乐高moc软件 编辑:程序博客网 时间:2024/06/06 04:25

Hibernate学习笔记二:表与实体类的映射方法

在使用Hibernate 中,我们最好尽量使得实体类的名字与表的名字 、实体类的属性名与表的列名尽量相同,这样可以省去很多的麻烦 。但是,在我们的实际项目中,可能会遇到实体类的名字与表的名字不一致 的情况 。

当遇到这样情况,我们应该怎么办呢??

如果我们使用的是Annotation
,则比较好办。

看实际例子,如下:

package com.hibernate.model;    import javax.persistence.Column;    import javax.persistence.Entity;    import javax.persistence.Id;    import javax.persistence.Table;    @Entity    @Table(name="_Teacher")  //当表名不一致时,可以这样指定    public class Teacher {    private int id;    private String name;    private String title;    @Id    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    @Column(name="_name")  //当实体类的属性名与表中的列名不一致时,可以这样指定,其中 (_name)为表 的列名。     public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }}

即当实体类的名字与表的名字不一致时,直接用@table(name=”tableName”)来进行指定即可。

如果实体类的属性名与表的列名不一致时 ,直接用@Column(name=”columnName”)来进行指定即可。

如果我们使用的是.xml映射文件,则方法如下:

<class name="Student" table="_Student"> <!-- 如果我们不写table,则默认表名与类名一致 -->    <!-- 主键 -->    <id name="id" column="id">        <!-- 主键的生成策略 -->        <generator class="native"/>    </id>    <!-- 其他属性,name对应实体类的属性,column对应关系型数据库表的列 -->    <property name="name"  column="_name"/>    <property name="age"/></class>

以上就是两种方法来解决实体类的名字和表中的名字不一致的方法。

如果我们不想实体类中的某属性持久化,应该怎么办呢??
解决方法就是:在Annotation中直接在该属性的get方法上添加@transient即可。在.xml文件中直接不写就好

例如,下面的例子就是将Teacher 类中的title不进行持久化。注意:title的getTitle方法上面添加的注解@transient

package com.hibernate.model;    import javax.persistence.Column;    import javax.persistence.Entity;    import javax.persistence.Id;    import javax.persistence.Table;    import javax.persistence.Transient;    @Entity    @Table(name="_Teacher")  //当表名不一致时,可以这样指定    public class Teacher {    private int id;    private String name;    private String title;    @Id    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    @Column(name="_name")  //当实体类的属性名与表中的列名不一致时,可以这样指定,其中 (_name)为表 的列名。     public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @Transient    //不进行 持久化     public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }}
1 0