下午用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映射类型