Hibernate 之 标识符生成器/映射类型

来源:互联网 发布:aofax呼叫中心软件 编辑:程序博客网 时间:2024/05/19 02:41

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


原创粉丝点击