`

hibernate unique配置不起作用解决方法

 
阅读更多

hibernate unique配置

    昨天自己创建了表,通过hibernate进行映射,添加了unique的限制,运行JUnit测试的时候发现,hibernate没有对配置的字段没有进行唯一性检查,而是直接通过,存入数据库。让人百思不得其解!
    后来查阅hibernate文档和网上核对,发现unique只在表是由hibernate自己创建的时候才有效,也就是说

  • validate                加载hibernate时,验证创建数据库表结构
  • create                  每次加载hibernate,重新创建数据库表结构
  • create-drop        加载hibernate时创建,退出是删除表结构
  • update                 加载hibernate自动更新数据库结构

hibernate.hbm2ddl.auto=update或create或create-drop时 如果数据库中没有表,那么hibernate创建表的时候就会在配置的字段上加上唯一约束。
hibernate.hbm2ddl.auto=update时 如果数据库中有表,hibernate并不会检测配置的字段是否有唯一约束,只要其他配置相同,就不会更新,所以此时的表没有唯一约束。
总之:如果要使用unique约束,那么表需要由hibernate生成 或者自己在表中添加约束,所以对于字段的唯一性约束,都是在数据库端做检查的

另:hibernate-release-4.2.0.final版本好像有问题,升级到4.2.5之后就解决了!

hibernate 异常捕获

在做测试的时候,在添加了唯一性约束的表中,插入重复数据,数据库报“ORA-00001: 违反唯一约束条件 (oracle用户名.oracle约束名称)”,原本想在action层获取异常信息的,通过JDBCException和HibernateException都无法捕获到异常,通过RuntimeException和Exception才可以捕获到异常,但是捕获到的异常通过e.getLocalizedMessage()调用,只有显示“Could not execute JDBC batch update; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update”,却没有数据库底层的异常。或通过查询文档发现,如果要获取底层的异常,需要通过e.getCause()递归获取,直到e.getCause()==null为止,才可以获取到底层的异常。
如:

 

 

 

catch (RuntimeException e) {
new DaoTest() {
		private void showTraces(Throwable t) {
		Throwable next = t.getCause();
		if (next == null) {
				System.out.println(t.getMessage());
			} else {
				showTraces(next);
			}
		}
	}.showTraces(e);
}

 

分享到:
评论

相关推荐

    Hibernate关联映射

    【知识点详解】 1. Hibernate 一对一外键单向关联: 在 Hibernate 中,一对一的外键单向关联意味着一个实体类中的属性指向另一个实体类,而...理解这些关联类型及其配置对于设计高效、灵活的 ORM 解决方案至关重要。

    Hibernate学习笔记

    解决这种不匹配的办法有两种:一是使用JDBC手工转换数据,二是使用对象关系映射(ORM)框架,比如Hibernate、TopLink或OJB。 了解Hibernate的基础后,可以开始构建第一个实例,其中需要导入相关的jar包、实体类和...

    hibernate学习笔记定义.pdf

    get()方法在找不到对象时返回null,而load()方法在找不到对象时会抛出异常。 5. update():更新一个游离状态的对象到持久化状态。 6. merge():合并一个游离状态的对象到持久化状态,解决并发问题。 7. lock():锁定...

    Hibernate使用hbm.xml配置映射关系解析

    Hibernate 使用 hbm.xml 配置映射关系解析 Hibernate 是一个流行的对象关系映射(ORM)工具,它提供了使用 XML 文件(hbm.xml)来配置映射关系的方式。这种方式可以将 Java 类与数据库表进行映射,使得开发者可以更...

    Hibernate Tutorial 03 (Object Identifier).pdf

    **解决方法**: 为了避免这个问题,我们应该使用一种自动生成的方式来为持久化对象分配标识符。这种方式下的标识符没有业务意义,因此不会被修改。为了实现这一目标,我们首先需要对`Book`类进行修改,添加一个名为`...

    Hibernate annotation

    总结,Hibernate注解提供了更直观、简洁的ORM解决方案,使得Java开发人员能够更高效地处理数据库操作。了解并熟练掌握这些注解,能极大地提升开发效率,同时也有利于代码的维护和扩展。在实际项目中,结合源码阅读和...

    S2SH框架配置文件

    尽管存在多种配置方法,但这里我们将聚焦于其中一种常见的配置方式。 1. **log4j.properties**:这是日志管理的配置文件,用于控制应用程序的日志输出。Log4j是Apache的一个开源项目,提供灵活的日志记录功能。通过...

    web项目开发经验

    - **配置错误**:检查`WEB-INF/beans.xml`中的配置是否正确,特别是与Hibernate相关的配置。 - **类或方法不存在**:如异常信息所示,可能是`ICxsq`属性在`Jcbjkpd`类中没有对应的getter或setter方法。 ### 7. 类型...

    Drools-WorkBench 6.4.0安装及问题解决

    ### Drools WorkBench 6.4.0 安装及问题解决 #### 环境准备 在开始安装 Drools WorkBench 6.4.0 之前,需要确保以下环境已经准备就绪: - **操作系统**: Windows 10 - **应用服务器**: Apache Tomcat 7.0.55 - **...

    Java面试题(SSH框架)

    1. **读取并解析配置文件:** Hibernate首先会读取`hibernate.cfg.xml`配置文件,此文件中包含了数据库连接信息以及其它运行时需要的一些配置参数。 2. **读取并解析映射信息:** 之后会读取`*.hbm.xml`文件或注解...

    1000道 互联网大厂Java工程师面试题1

    这些节点在客户端和服务端之间的交互中起到了关键作用,例如客户端可以通过注册 Watcher 监听节点变化,实现分布式通知功能。 ZooKeeper 的主要功能包括: 1. 配置管理:集中式存储配置信息,方便服务动态更新配置...

    spring-boot笔记

    - **作用**: 自动装配 Bean,可以用于类成员变量、方法及构造函数。 - **默认行为**: 按照类型进行匹配。 - **@Qualifier**: 当存在多个相同类型的 Bean 时,可以使用 @Qualifier 指定具体装配哪一个。 2. **...

    STRUTS——SQL添加删除

    在处理添加和删除操作时,可能会遇到SQL异常,如Unique constraint violation(唯一性约束违反)或No Such Record Found(找不到记录)。因此,需要在Action或DAO中添加适当的异常处理代码,以优雅地处理这些问题,...

    三层架构开发的MyQQ

    "三层架构"作为现代软件设计中的一个重要概念,为团队协作提供了高效、灵活的解决方案。这个名为"Unique_MyQQ"的项目,就是四人小组在一周时间内运用三层架构技术开发的一款名为"MyQQ"的应用,它充分展示了服务器和...

    grail in action

    3. **集成多种技术**:Grails集成了多种成熟的技术,如Spring、Hibernate等,提供了一站式的解决方案。 **二、Groovy语言基础** Groovy是一种面向对象的编程语言,它的设计灵感来源于Perl、Python、Ruby等动态语言...

    Java程序员面试题大全

    - 创建表A时,要设置m字段为唯一(UNIQUE)且非空(NOT NULL),n字段初始值为0,m、n、y字段不可为空(NOT NULL)。 - 修改表A的n字段初始值,可以通过ALTER TABLE语句实现,例如`ALTER TABLE A ALTER COLUMN n ...

    oracle入门基础教程全面详细

    - **GROUP BY子句**:讲解GROUP BY子句的作用及使用方法。 - **HAVING子句**:介绍HAVING子句的使用,用于对分组后的结果进行过滤。 - **组合使用**:结合多个分组函数与GROUP BY子句的应用实例。 #### 六、多表...

Global site tag (gtag.js) - Google Analytics