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); }
相关推荐
【知识点详解】 1. Hibernate 一对一外键单向关联: 在 Hibernate 中,一对一的外键单向关联意味着一个实体类中的属性指向另一个实体类,而...理解这些关联类型及其配置对于设计高效、灵活的 ORM 解决方案至关重要。
解决这种不匹配的办法有两种:一是使用JDBC手工转换数据,二是使用对象关系映射(ORM)框架,比如Hibernate、TopLink或OJB。 了解Hibernate的基础后,可以开始构建第一个实例,其中需要导入相关的jar包、实体类和...
get()方法在找不到对象时返回null,而load()方法在找不到对象时会抛出异常。 5. update():更新一个游离状态的对象到持久化状态。 6. merge():合并一个游离状态的对象到持久化状态,解决并发问题。 7. lock():锁定...
Hibernate 使用 hbm.xml 配置映射关系解析 Hibernate 是一个流行的对象关系映射(ORM)工具,它提供了使用 XML 文件(hbm.xml)来配置映射关系的方式。这种方式可以将 Java 类与数据库表进行映射,使得开发者可以更...
**解决方法**: 为了避免这个问题,我们应该使用一种自动生成的方式来为持久化对象分配标识符。这种方式下的标识符没有业务意义,因此不会被修改。为了实现这一目标,我们首先需要对`Book`类进行修改,添加一个名为`...
总结,Hibernate注解提供了更直观、简洁的ORM解决方案,使得Java开发人员能够更高效地处理数据库操作。了解并熟练掌握这些注解,能极大地提升开发效率,同时也有利于代码的维护和扩展。在实际项目中,结合源码阅读和...
尽管存在多种配置方法,但这里我们将聚焦于其中一种常见的配置方式。 1. **log4j.properties**:这是日志管理的配置文件,用于控制应用程序的日志输出。Log4j是Apache的一个开源项目,提供灵活的日志记录功能。通过...
- **配置错误**:检查`WEB-INF/beans.xml`中的配置是否正确,特别是与Hibernate相关的配置。 - **类或方法不存在**:如异常信息所示,可能是`ICxsq`属性在`Jcbjkpd`类中没有对应的getter或setter方法。 ### 7. 类型...
### Drools WorkBench 6.4.0 安装及问题解决 #### 环境准备 在开始安装 Drools WorkBench 6.4.0 之前,需要确保以下环境已经准备就绪: - **操作系统**: Windows 10 - **应用服务器**: Apache Tomcat 7.0.55 - **...
1. **读取并解析配置文件**:在启动应用时,Hibernate首先会读取配置文件(如`hibernate.cfg.xml`),从中获取数据库连接信息和其他配置设置。 2. **读取并解析映射信息,创建SessionFactory**:接下来,Hibernate会...
1. **读取并解析配置文件:** Hibernate首先会读取`hibernate.cfg.xml`配置文件,此文件中包含了数据库连接信息以及其它运行时需要的一些配置参数。 2. **读取并解析映射信息:** 之后会读取`*.hbm.xml`文件或注解...
这些节点在客户端和服务端之间的交互中起到了关键作用,例如客户端可以通过注册 Watcher 监听节点变化,实现分布式通知功能。 ZooKeeper 的主要功能包括: 1. 配置管理:集中式存储配置信息,方便服务动态更新配置...
- **作用**: 自动装配 Bean,可以用于类成员变量、方法及构造函数。 - **默认行为**: 按照类型进行匹配。 - **@Qualifier**: 当存在多个相同类型的 Bean 时,可以使用 @Qualifier 指定具体装配哪一个。 2. **...
在处理添加和删除操作时,可能会遇到SQL异常,如Unique constraint violation(唯一性约束违反)或No Such Record Found(找不到记录)。因此,需要在Action或DAO中添加适当的异常处理代码,以优雅地处理这些问题,...
"三层架构"作为现代软件设计中的一个重要概念,为团队协作提供了高效、灵活的解决方案。这个名为"Unique_MyQQ"的项目,就是四人小组在一周时间内运用三层架构技术开发的一款名为"MyQQ"的应用,它充分展示了服务器和...
3. **集成多种技术**:Grails集成了多种成熟的技术,如Spring、Hibernate等,提供了一站式的解决方案。 **二、Groovy语言基础** Groovy是一种面向对象的编程语言,它的设计灵感来源于Perl、Python、Ruby等动态语言...
- 创建表A时,要设置m字段为唯一(UNIQUE)且非空(NOT NULL),n字段初始值为0,m、n、y字段不可为空(NOT NULL)。 - 修改表A的n字段初始值,可以通过ALTER TABLE语句实现,例如`ALTER TABLE A ALTER COLUMN n ...
- **GROUP BY子句**:讲解GROUP BY子句的作用及使用方法。 - **HAVING子句**:介绍HAVING子句的使用,用于对分组后的结果进行过滤。 - **组合使用**:结合多个分组函数与GROUP BY子句的应用实例。 #### 六、多表...