首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Hiberante知识点梳理

他很大程度的简化DAO层的编码工作 hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。...也就是说,如果此对象在数据库中不存在的话,就不能使用update()方法。 saveOrUpdate()方法操作的对象既可以使持久化了的,也可以使没有持久化的对象。...12. hibernate里面的sorted collection 和ordered collection有什么区别 sorted collection是在内存中通过Java比较进行排序的 ordered...但它不会级联删除 delete: 级联删除, 但不具备级联保存和更新 all-delete-orphan: 解除父子关系时,自动删除不属于父对象的子对象, 也支持级联删除和级联保存更新. all: 级联删除...POJO的要求 必须有一个无参的构造方法 不能为final 属性要为Private,并且提供get/set 18. inverse 多对多关系中默认为flase 表示为两端都在维护关系 应该改为一端维护关系而不是两端

1.4K00

Hibernate学习笔记2

Hibernate学习笔记2 1.Hibernate持久化类与主键生成策略 2.Hibernate持久化对象状态 2.1. 持久化类类三种状态 2.2....2.持久态:hibernatesession管理范围内,它具有持久化标识OID它的特点,事务未提交前一直是持久态,当它发生改变时,hibernate是可以检测到的。...对于托管态对象,它发生改变时hibernet不能检测到。 2.2. 持久化类三种状态切换 ?...级联删除 我们删除客户时,也要删除订单,如果没有做级联,那么这个操作是不允许。 为了维护数据完整性 ? 想要完成操作:我们可以客户中添加cascade=”delete”; ?...⊙大学毕业刚培训完Java,没有经验怎么找工作呢? ⊙请问你知道什么是栈吗? ⊙看看你对队列的了解有多少?

1.4K40
您找到你想要的搜索结果了吗?
是的
没有找到

【全网最全】JSR303参数校验与全局异常处理(从理论到实践别用if判断参数了)

Hibernate官网 官网介绍: 验证数据是一项常见任务,它发生在从表示层到持久层的所有应用程序层中。通常在每一层都实现相同的验证逻辑,这既耗时又容易出错。...为了避免重复这些验证,开发人员经常将验证逻辑直接捆绑到域模型中,将域类与验证代码混在一起,而验证代码实际是关于类本身的元数据。...它特别不依赖于 Web 或持久层,并且可用于服务端应用程序编程以及富客户端 Swing 应用程序开发人员。...但是不能用在成员属性(字段) 由于无法加在成员属性(字段),所以无法单独完成级联校验,需要配合@Valid @Valid: JDK提供的(标准JSR-303规范) 不支持分组校验 可以用在方法、构造函数...、方法参数和成员属性(字段) 可以加在成员属性(字段),能够独自完成级联校验 总结:@Validated用到分组时使用,一个学校对象里还有很多个学生对象需要使用@ValidatedController

62120

MyBatis与Hibernate区别

也就是说,相对于常见的 JDBC/SQL 持久层方案中需要管理SQL 语句,Hibernate采用了更自然的面向对象的视角来持久化 Java 应用中的数据。...所以使用二级缓存时如果出现脏数据,系统会报出错误并提示。而MyBatis在这一方面,使用二级缓存时需要特别小心。如果不能完全确定数据更新操作的波及范围,避免Cache的盲目使用。...否则,脏数据的出现会给系统的正常运行带来很大的隐患。...SQL查询,但开发模式却与orm不同,需要转换思维,因此使用上有些不方便。...DAO层过于简单,对象组装的工作量较大。 不支持级联更新、级联删除。 Mybatis的日志除了基本记录功能外,其它功能薄弱很多。 编写动态SQL时,不方便调试,尤其逻辑复杂时。

7610

求求你别在用IF ELSE校验参数了

前言 验证数据是贯穿所有应用程序层(从表示层到持久层)的常见任务。通常在每一层实现相同的验证逻辑,这既费时又容易出错。...提供的,提供了一个分组功能,可以入参验证时,根据不同的分组采用不同的验证机制。...没有添加分组属性时,默认验证没有分组的验证属性(Default分组); @Validated:可以用在类型、方法和方法参数上,但是不能用在成员属性(字段); @Validated:用在方法入参上无法单独提供嵌套验证功能...@Valid:作为标准JSR-303规范,还没有吸收分组的功能; @Valid:可以用在方法、方法参数、构造函数、方法参数和成员属性(字段); @Valid加在方法参数时并不能够自动进行嵌套验证,而是用在需要嵌套验证类的相应字段...goodsPrice; } 如果级联校验内元素的属性校验未通过,抛出MethodArgumentNotValidException异常,注意在全局异常处理捕获该异常并处理 //级联校验 @PostMapping

1.7K20

Validator,就来这一篇吧

前言 验证数据是贯穿所有应用程序层(从表示层到持久层)的常见任务。通常在每一层实现相同的验证逻辑,这既费时又容易出错。...提供的,提供了一个分组功能,可以入参验证时,根据不同的分组采用不同的验证机制。...没有添加分组属性时,默认验证没有分组的验证属性(Default分组); @Validated:可以用在类型、方法和方法参数上,但是不能用在成员属性(字段); @Validated:用在方法入参上无法单独提供嵌套验证功能...@Valid:作为标准JSR-303规范,还没有吸收分组的功能; @Valid:可以用在方法、方法参数、构造函数、方法参数和成员属性(字段); @Valid加在方法参数时并不能够自动进行嵌套验证,而是用在需要嵌套验证类的相应字段...goodsPrice; } 如果级联校验内元素的属性校验未通过,抛出MethodArgumentNotValidException异常,注意在全局异常处理捕获该异常并处理 //级联校验 @PostMapping

2.5K10

求求你别在用IF ELSE校验参数了

前言 验证数据是贯穿所有应用程序层(从表示层到持久层)的常见任务。通常在每一层实现相同的验证逻辑,这既费时又容易出错。...提供的,提供了一个分组功能,可以入参验证时,根据不同的分组采用不同的验证机制。...没有添加分组属性时,默认验证没有分组的验证属性(Default分组); @Validated:可以用在类型、方法和方法参数上,但是不能用在成员属性(字段); @Validated:用在方法入参上无法单独提供嵌套验证功能...@Valid:作为标准JSR-303规范,还没有吸收分组的功能; @Valid:可以用在方法、方法参数、构造函数、方法参数和成员属性(字段); @Valid加在方法参数时并不能够自动进行嵌套验证,而是用在需要嵌套验证类的相应字段...goodsPrice; } 如果级联校验内元素的属性校验未通过,抛出MethodArgumentNotValidException异常,注意在全局异常处理捕获该异常并处理 //级联校验 @PostMapping

1.9K10

求求你别在用IF ELSE校验参数了

前言 验证数据是贯穿所有应用程序层(从表示层到持久层)的常见任务。通常在每一层实现相同的验证逻辑,这既费时又容易出错。...提供的,提供了一个分组功能,可以入参验证时,根据不同的分组采用不同的验证机制。...没有添加分组属性时,默认验证没有分组的验证属性(Default分组); @Validated:可以用在类型、方法和方法参数上,但是不能用在成员属性(字段); @Validated:用在方法入参上无法单独提供嵌套验证功能...@Valid:作为标准JSR-303规范,还没有吸收分组的功能; @Valid:可以用在方法、方法参数、构造函数、方法参数和成员属性(字段); @Valid加在方法参数时并不能够自动进行嵌套验证,而是用在需要嵌套验证类的相应字段...goodsPrice; } 如果级联校验内元素的属性校验未通过,抛出MethodArgumentNotValidException异常,注意在全局异常处理捕获该异常并处理 //级联校验 @PostMapping

1.7K20

day30_Hibernate学习笔记_02

(User.class, 1); // 持久状态         session.getTransaction().commit(); // 持久状态,事务提交时,会把持久化状态对象同步(更新)到数据库中...// 持久状态,事务提交时,会把持久化状态对象同步(更新)到数据库中         session.close();    // 游离状态     }     @Test     // 持久  =...session.update(u);  // 持久状态         session.getTransaction().commit(); // 持久状态 ,事务提交时,会把持久化状态对象同步(更新...因为一级缓存本质是一个Map结合。键是ID不能相同。     ...总结:   主表不能删除从表已经引用(关联)的数据。   从表不能添加主表不存在的数据。

93520

Hibernate 脏数据检查

我们看下面的代码: 当事务提交时,Hibernate会对session中的PO(持久化对象)进行检测,判断持久化对象的状态是否发生了改变,如果发生了改变就会将改变更新到数据库中。...,这时拦截会捕获这个动作,并且将改属性标志为已经改变,之后的数据库操作时将其更新到数据库中。...这个方法的优点是提高了数据更新的同步性,但是这也是它的缺点,如果一个实体对象有很多属性发生了改变,势必造成大量拦截回调方法的调用,这些拦截都是通过Dynamic Proxy或者CGLIB实现的,执行时都会付出一定的执行代价...Hibernate中是采用数据版本比对的方法来进行脏数据检查的,我们结合下面的代码来讲解Hibernate的具体实现策略。...此时需要Hibernate能根据当前对象的状态来判断是否要将级联对象保存到数据库中。此时,Hibernate会根据unsaved-value进行判断。

1.4K60

@Valid的作用(级联校验)以及常用约束注解的解释说明

10: 18 name {message} -> 名字不能为null -> 名字不能为null: null 可以直观的看到效果,此处的校验只执行Person.Simple.class这个Group组的约束...该注解用于验证级联的属性、方法参数或方法返回类型。 当验证属性、方法参数或方法返回类型时,将验证对象及其属性定义的约束,另外:此行为是递归应用的。...在此期间它完成了如下事(方法和构造都复杂点,因为包含入参和返回值): 1. 找到方法所有的注解保存起来 2....因为基本类型都有默认值,不可能为null的 所有的注解都能标注:字段、方法、构造、入参、以及注解 JSR的注解都申明都非常的简单,没有Hibernate提供的复杂,比如没有用到@ReportAsSingleViolation...org.hibernate.validator.constraints.NotEmpty.message = 不能为空 org.hibernate.validator.constraints.ParametersScriptAssert.message

3.7K30

异常 object references an unsaved transient instance - save the transient instance before flushing 的解决

错误信息 org.hibernate.TransientPropertyValueException: object references an unsaved transient instance -...save the transient instance before flushing : ah.szxy.pojo.Users.roles -> ah.szxy.pojo.Roles 错误原因 添加一个表引用外键属性时没有开启级联操作...,导致添加属性的时候会报上面异常 解决方案: 最好在添加这个属性值的get set方法之前 ,添加关联关系时 ,表示关联关系的注解汇后添加 cascade=CascadeType.PERSIST...有待你们的验证 ps :今天又遇到了一次 ,这次又加了点东西才能运行成功 ,注解如下 @ManyToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE...}) JPA 中定义了四种 CASCADE 类型: * PERSIST:持久保存拥有方实体时,也会持久保存该实体的所有相关数据。

86120

异常 object references an unsaved transient instance - 的解决

错误信息 org.hibernate.TransientPropertyValueException: object references an unsaved transient instance -...save the transient instance before flushing : ah.szxy.pojo.Users.roles -> ah.szxy.pojo.Roles 错误原因 添加一个表引用外键属性时没有开启级联操作...,导致添加属性的时候会报上面异常 解决方案: 最好在添加这个属性值的get set方法之前 ,添加关联关系时 ,表示关联关系的注解汇后添加 cascade=CascadeType.PERSIST...有待你们的验证 ps :今天又遇到了一次 ,这次又加了点东西才能运行成功 ,注解如下 @ManyToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE...}) JPA 中定义了四种 CASCADE 类型: * PERSIST:持久保存拥有方实体时,也会持久保存该实体的所有相关数据。

7.4K20

hibernate笔记加强版「建议收藏」

– generator标签表示此主键生产 告诉hibernate容器用什么样的方式产生此主键。...将抛异常(由于主键不能被改动),假设其它字段对照不,就说明了此对象被改动过,那么hibernate就是自己主动生成update语句,将更新此对象相应表中相应的记录(依据主键查找的此记录)。...检查以上2、3步的同一时候会检查此持久化对象的关联对象(就是有关系的对象(一对多,多对多等)),是否有级联操作,假设有就级联操作此关联的对象。还会检查是否对此关联对象运行关系操作。...检查以上2、3步的同一时候会检查此持久化对象的关联对象(就是有关系的对象(一对多,多对多等)),是否有级联操作,假设有就级联操作此关联的对象。...二级缓存中的数据的适用场合 存储二级缓存中的数据不能频繁更新。 并且存储二级缓存中的数据不能是某一个线程私有的数据。 39.

85820
领券