《Hibernate学习笔记二》:表与实体类的映射方法
2016-04-27 20:46
423 查看
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; } }
相关文章推荐
- Python中配置matplotlib模块
- 1.win7与Ubuntu文件共享工具-Samba安装及使用方法
- android 拍照 相册 剪切以及显示功能
- jQuery--百度百科
- 剑指offer-面试题56:链表中环的入口结点
- 欢迎使用CSDN-markdown编辑器
- C/C++中各种类型int、long、double、char表示范围(最大最小值)
- Windows核心编程之CloseHandle
- 快速排序
- JSP--百度百科
- opencv成长之路2:一段用来获取摄像头视频的代码
- 对象、类和包
- 如何有效提升Unity Gear VR游戏性能
- ViewDragHelper详解- 可拖动的view
- java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.IdentNod
- 站立会议第九天
- 第一次冲刺阶段(十)
- matlab如何剔除无用数据
- View的工作流程
- CodeForces - 236B Easy Number Challenge (暴力)