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