当前位置: 首页 > news >正文

自己做店招的网站网站一站 手机微信600 900

自己做店招的网站,网站一站 手机微信600 900,郑州企业网站优化服务哪家好,浙江门户网站建设公司hibernate 刷新Hibernate将开发人员的思维方式从思考SQL转变为思考对象状态转换。 根据Hibernate Docs#xff0c;实体可能处于以下状态之一#xff1a; new / transient#xff1a;实体不与持久性上下文相关联#xff0c;因为它是数据库不知道的新创建的对象。 持久性实体可能处于以下状态之一 new / transient实体不与持久性上下文相关联因为它是数据库不知道的新创建的对象。 持久性实体与持久性上下文相关联位于第一级缓存中并且存在一个表示该实体的数据库行。 分离实体先前与持久性上下文相关联但是持久性上下文已关闭或者手动移出了实体。 已删除实体被标记为已删除并且持久性上下文将在刷新时从数据库中将其删除。 通过调用EntityManager方法来将对象从一种状态移动到另一种状态例如 坚持 合并 去掉 级联允许将给定事件从父级传播到子级也简化了实体关系管理的管理。 在刷新期间Hibernate会将当前持久性上下文记录的更改转换为SQL查询。 现在请考虑以下代码中发生了什么为简洁起见将其简化 Entity public class Product {OneToMany(fetch FetchType.LAZY, cascade CascadeType.ALL, mappedBy product, orphanRemoval true)OrderBy(index)private Set images new LinkedHashSet();public Set getImages() {return images;}public void addImage(Image image) {images.add(image);image.setProduct(this);}public void removeImage(Image image) {images.remove(image);image.setProduct(null);} }Entity public class Image {Column(unique true)private int index;ManyToOneprivate Product product;public int getIndex() {return index;}public void setIndex(int index) {this.index index;}public Product getProduct() {return product;}public void setProduct(Product product) {this.product product;} }final Long productId transactionTemplate.execute(new TransactionCallback() {Overridepublic Long doInTransaction(TransactionStatus transactionStatus) {Product product new Product();Image frontImage new Image();frontImage.setIndex(0);Image sideImage new Image();sideImage.setIndex(1);product.addImage(frontImage);product.addImage(sideImage);entityManager.persist(product);return product.getId();} });try {transactionTemplate.execute(new TransactionCallback() {Overridepublic Void doInTransaction(TransactionStatus transactionStatus) {Product product entityManager.find(Product.class, productId);assertEquals(2, product.getImages().size());Iterator imageIterator product.getImages().iterator();Image frontImage imageIterator.next();assertEquals(0, frontImage.getIndex());Image sideImage imageIterator.next();assertEquals(1, sideImage.getIndex());Image backImage new Image();sideImage.setName(back image);sideImage.setIndex(1);product.removeImage(sideImage);product.addImage(backImage);entityManager.flush();return null;} });fail(Expected ConstraintViolationException); } catch (PersistenceException expected) {assertEquals(ConstraintViolationException.class, expected.getCause().getClass()); } 由于存在Image.index唯一约束因此在刷新期间会收到ConstraintviolationException。 您可能想知道为什么会发生这种情况因为我们在添加具有相同索引的backImage之前调用sideImage的remove答案是刷新操作顺序。 根据Hibernate JavaDocs SQL操作顺序为 插入 更新 集合元素的删除 集合元素的插入 删除 因为我们的图像集合是“ mappedBy”所以图像将控制关联因此“ backImage”插入发生在“ sideImage”删除之前。 select product0_.id as id1_5_0_, product0_.name as name2_5_0_ from Product product0_ where product0_.id? select images0_.product_id as product_4_5_1_, images0_.id as id1_1_1_, images0_.id as id1_1_0_, images0_.index as index2_1_0_, images0_.name as name3_1_0_, images0_.product_id as product_4_1_0_ from Image images0_ where images0_.product_id? order by images0_.index insert into Image (id, index, name, product_id) values (default, ?, ?, ?) ERROR: integrity constraint violation: unique constraint or index violation; UK_OQBG3YIU5I1E17SL0FEAWT8PE table: IMAGE 要解决此问题您必须在除去操作之后手动刷新持久性上下文 transactionTemplate.execute(new TransactionCallbackVoid() {Overridepublic Void doInTransaction(TransactionStatus transactionStatus) {Product product entityManager.find(Product.class, productId);assertEquals(2, product.getImages().size());IteratorImage imageIterator product.getImages().iterator();Image frontImage imageIterator.next();assertEquals(0, frontImage.getIndex());Image sideImage imageIterator.next();assertEquals(1, sideImage.getIndex());Image backImage new Image();backImage.setIndex(1);product.removeImage(sideImage);entityManager.flush();product.addImage(backImage);entityManager.flush();return null;} }); 这将输出所需的行为 select versions0_.image_id as image_id3_1_1_, versions0_.id as id1_8_1_, versions0_.id as id1_8_0_, versions0_.image_id as image_id3_8_0_, versions0_.type as type2_8_0_ from Version versions0_ where versions0_.image_id? order by versions0_.type delete from Image where id? insert into Image (id, index, name, product_id) values (default, ?, ?, ?) 源代码在这里 。 参考 Hibernate Facts在Vlad Mihalcea的Blog博客上 我们的JCG合作伙伴 Vlad Mihalcea 知道冲洗操作的顺序很重要 。 翻译自: https://www.javacodegeeks.com/2013/11/hibernate-facts-knowing-flush-operations-order-matters.htmlhibernate 刷新
http://wiki.neutronadmin.com/news/281491/

相关文章:

  • 哪里找专业做网站的公司网站建设产品图片尺寸要求
  • 网站管理助手4.1html代码注释
  • 做网站推广邢台深圳专业网站建设公司好吗
  • html5 社团网站模板 代码下载在速卖通上具体网络营销方案
  • 网站建设的三网合一wordpress on zencart
  • 网站的效果图网页游戏制作培训
  • 钓鱼网站怎么制作html比较权威的房产网站
  • 哪些网站做的好看的图片网站建设 骏域网络建设专家广州
  • 2012r2网站建设建e网室内设计网怎么用
  • 谁做的四虎网站是多少钱郑州网站推广公司咨询
  • 网站建设的主要产品网站建设落地页
  • 克隆网站模板小红书seo排名优化
  • 快速搭建电子商务网站流量推广怎么做
  • phpcmsv9网站建设入门教程海外网站备案
  • iis7 发布静态网站上海公司买新能源车需要什么条件
  • 代码网站怎么制作可以推广的app有哪些
  • 手机网站建设策划书免费建站网站一级123456
  • 做网站做哪个行业好前端程序员
  • 外包公司做的网站怎么改密码中国被墙的网站
  • 互联网网站设计做app的网站有哪些功能
  • 潍坊娜娜网站制作工作啦
  • 权威的唐山网站建设深圳市住房和建设局网站和市住宅租赁管理服务中心
  • 开封建网站备案网查询
  • 免费设计软件下载网站大全宁夏交通建设质监局官方网站
  • 营口建设信息网站从零开始网站建设
  • 中国建设银行个人网上银行官方网站直播网站 咋做
  • 打造一个网站wordpress静态文件
  • 广州网站建设网站建设网页版qq游戏大厅
  • 做网站的专业叫啥网站广东海外建设集团有限公司
  • 网站建设页面大小新城疫最快解决的办法