Hibernate+Oracle使用序列

最近自己搞一个项目,使用的是S2SH+Oracle其中模型中使用了Oracle的序列,Hibernate模型中使用序列的方法如下:

@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "userID")
	@SequenceGenerator(name = "userID", allocationSize = 1, initialValue = 1, sequenceName = "USER_ID")
	public Integer getUserID() {
		return userID;
	}

其中USER_ID为一个已经存在序列(该序列命名不规范,还望大家注意)。

在使用序列的时候,出现了很多错误,现在总结一下:

1、首先是不入库,Hibernate始终只打印如下一句SQL

Hibernate:selectUSER_ID.nextvalfromdual

按照正常情况来说,应该是Hibernate查询的序列的下一个值之后,直接set到UserID中的,然后再进行Insert操作,但是此处,Hibernate始终不进行insert操作,后面分析,是由于在进行session.save(user);时,未开启失误,而且保存之后,也没有进行事物的commit操作,因此修改代码,添加上事物操作(目前需手动管理失误,后续通过AOP来管理)

Session session = getSession();
		Transaction tr=session.beginTransaction();
		try {
			session.save(user);
			tr.commit();
			session.close();
			session.flush();
		} catch (HibernateException e) {

2、进行上述操作之后,还是不能入库,而且查询的时候始终提示语法错误,后面仔细排查发现,原来是数据库用户配置错啦.....太不仔细了!

2、进行查询时,提示如下异常org.hibernate.PropertyAccessException,在网上查了发现是由于模型中,定义了Int型,而数据库中存在为空的场景,所以需要将模型中所有为Int的修改为Integer。

后续如果还有问题,继续在此篇文章上更新

相关推荐