下午用hibernate去改善一個項目,結果出現了好多關於映射類型的問題,在網上搜的好多答案也不盡人意,後來結合著hibernate文檔以及孫衛琴老師的《hibernate逍遙記》終於解決了
hibernate 用物件識別碼(oid)來區分對象,oid是關聯式資料庫中的主鍵。
以下是《hibernate逍遙記》中介紹的8種內建標識符產生器:
下面列出hibernate 映射類型、對應的java基本類型(或者它們的封裝類)以及對應的標準sql類型
在這裡我出現的三個糾結的問題是:
- 我用的是mysql,大文本類型資料庫中用的是text,java基本類型用的是String,而String 預設映射的是varchar類型,所以想讓String映射到text類型,必須在實體類中指出,不然匹配異常
- 實體類中boolean類型的映射,此處的boolean類型也要像第一個問題中那樣在實體類中明確指出,否則匹配異常
- 屬性定義為read時,get/set採用自動產生,程式出錯報sql語法錯誤,這個問題沒有解決(希望看到的能幫忙解釋一下)
以下為例子:
@Entity@Table(name="t_message")public class Message {private int id;private String content;//假使用長類型private boolean isread;@Type(type="text") // 明確指出映射類型public String getContent() {return content;}@Id@GeneratedValue(strategy=GenerationType.AUTO)public int getId() {return id;}public void setContent(String content) {this.content = content;}public void setId(int id) {this.id = id;}@Type(type="true_false")//指出映射類型public boolean isIsread() {return isread;}public void setIsread(boolean isread) {this.isread = isread;}}
以上總結,hibernate 映射類型是資料庫和java類型之間映射的橋樑,當一個java類型對應多個hibernate映射類型的場合,有時必須顯式指定hibernate映射類型