解决Hibernate注解不能自动创建oracle表

实体类
import javax.persistence.Entity;//注意不能导入org.hibernate.annotations.Entity包
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;

@Entity
public class Book {
	private Integer id;
	private String name;
	
	@SequenceGenerator(name = "seq_book", sequenceName ="seq_book")
	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE,generator = "seq_book")
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

执行测试类保存对象时报错:

Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update

Caused by: java.sql.BatchUpdateException: ORA-00942: 表或视图不存在


解决方法:要想自动创建表,需要在hibernate.cfg.xml文件中加上hibernate.hbm2ddl.auto属性

<property name="hibernate.hbm2ddl.auto">update</property>


hibernate.hbm2ddl.auto包含4个值:
create : 会根据你的model类来生成表,但是每次运行都会删除上一次的表,重新生成表,哪怕2次没有任何改变
create-drop : 根据model类生成表,但是sessionFactory一关闭,表就自动删除
update : 最常用的属性,也根据model类生成表,即使表结构改变了,表中的行仍然存在,不会删除以前的行
validate : 只会和数据库中的表进行比较,不会创建新表,但是会插入新值
开发调试时可以选择create和update,但是网站发布正式版本的时候,对数据库现有的数据或表结构进行自动的更新是很危险的。此时此刻应该由DBA同志通过手工的方式进行后台的数据库操作。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值