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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值