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

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;
    }

}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

即当实体类的名字与表的名字不一致时,直接用@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;
    }

} from: http://blog.csdn.net/u010412719/article/details/51264341

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值