hibernate unsaved-value 转载(http://www.javaeye.com/topic/1604)

你显式的使用session.save()或者session.update()操作一个对象的时候,实际上是用不到unsaved-value的。某些情况下(父子表关联保存),当你在程序中并没有显式的使用save或者update一个持久对象,那么Hibernate需要判断被操作的对象究竟是一个已经持久化过的持久对象,是一个尚未被持久化过的内存临时对象。例如:

Java代码
  1. Session session = ...;  
  2. Transaction tx = ...;  
  3.   
  4. Parent parent = (Parent); session.load(Parent.class, id);;  
  5.   
  6. Child child = new Child();;  
  7. child.setParent(parent);;  
  8. child.setName("sun");;  
  9.   
  10. parent.addChild(child);;  
  11. s.update(parent);;  
  12.   
  13. s.flush();;  
  14. tx.commit();;  
  15. s.close();;  



在上例中,程序并没有显式的session.save(child); 那么Hibernate需要知道child究竟是一个临时对象,还是已经在数据库中有的持久对象。如果child是一个新创建的临时对象(本例中就是这种情况),那么Hibernate应该自动产生session.save(child)这样的操作,如果child是已经在数据库中有的持久对象,那么Hibernate应该自动产生session.update(child)这样的操作。

因此我们需要暗示一下Hibernate,究竟child对象应该对它自动save还是update。在上例中,显然我们应该暗示Hibernate对child自动save,而不是自动update。那么Hibernate如何判断究竟对child是save还是update呢?它会取一下child的主键属性 child.getId() ,这里假设id是 java.lang.Integer类型的。如果取到的Id值和hbm映射文件中指定的unsave-value相等,那么Hibernate认为child是新的内存临时对象,发送save,如果不相等,那么Hibernate认为child是已经持久过的对象,发送update。

unsaved-value="null" (默认情况,适用于大多数对象类型主键 Integer/Long/String/...)

Hibernate取一下child的Id,取出来的是null(在上例中肯定取出来的是null),和unsaved-value设定值相等,发送save(child)

Hibernate取一下child的id,取出来的不是null,那么和unsaved-value设定值不相等,发送update(child)

例如下面的情况:

Java代码
  1. Session session = ...;  
  2. Transaction tx = ...;  
  3.   
  4. Parent parent = (Parent); session.load(Parent.class, id);;  
  5. Child child = (Child); session.load(Child.class, childId);;  
  6.   
  7. child.setParent(parent);;  
  8. child.setName("sun");;  
  9.   
  10. parent.addChild(child);;  
  11. s.update(parent);;  
  12.   
  13. s.flush();;  
  14. tx.commit();;  
  15. s.close();;  



child已经在数据库中有了,是一个持久化的对象,不是新创建的,因此我们希望Hibernate发送update(child),在该例中,Hibernate取一下child.getId(),和unsave-value指定的null比对一下,发现不相等,那么发送update(child)。

BTW: parent对象不需要操心,因为程序显式的对parent有load操作和update的操作,不需要Hibernate自己来判断究竟是save还是update了。我们要注意的只是child对象的操作。另外unsaved-value是定义在Child类的主键属性中的。

Java代码
  1. <class name="Child" table="child">  
  2. <id column="id" name="id" type="integer" unsaved-value="null">  
  3.   <generator class="identity"/>  
  4. </id>  
  5. ...  
  6. </class>  



如果主键属性不是对象型,而是基本类型,如int/long/double/...,那么你需要指定一个数值型的unsaved-value,例如:

Java代码
  1. unsaved-null="0"  



在此提醒大家,很多人以为对主键属性定义为int/long,比定义为Integer/Long运行效率来得高,认为基本类型不需要进行对象的封装和解构操作,因此喜欢把主键定义为int/long的。但实际上,Hibernate内部总是把主键转换为对象型进行操作的,就算你定义为int/long型的,Hibernate内部也要进行一次对象构造操作,返回给你的时候,还要进行解构操作,效率可能反而低也说不定。因此大家一定要扭转一个观点,在Hibernate中,主键属性定义为基本类型,并不能够比定义为对象型效率来的高,而且也多了很多麻烦,因此建议大家使用对象型的Integer/Long定义主键。

unsaved-value="none"和
unsaved-value="any"

主主要用在主键属性不是通过Hibernate生成,而是程序自己setId()的时候。

在这里多说一句,强烈建议使用Hibernate的id generator,或者你可以自己扩展Hibernate的id generator,特别注意不要使用有实际含义的字段当做主键来用!例如用户类User,很多人喜欢用用户登陆名称做为主键,这是一个很不好的习惯,当用户类和其他实体类有关联关系的时候,万一你需要修改用户登陆名称,一改就需要改好几张表中的数据。偶合性太高,而如果你使用无业务意义的id generator,那么修改用户名称,就只修改user表就行了。

由这个问题引申出来,如果你严格按照这个原则来设计数据库,那么你基本上是用不到手工来setId()的,你用Hibernate的id generator就OK了。因此你也不需要了解当

unsaved-value="none"和
unsaved-value="any"

究竟有什么含义了。如果你非要用assigned不可,那么继续解释一下:

unsaved-value="none" 的时候,由于不论主键属性为任何值,都不可能为none,因此Hibernate总是对child对象发送update(child)

unsaved-value="any" 的时候,由于不论主键属性为任何值,都肯定为any,因此Hibernate总是对child对象发送save(child)

大多数情况下,你可以避免使用assigned,只有当你使用复合主键的时候不得不手工setId(),这时候需要你自己考虑究竟怎么设置unsaved-value了,根据你自己的需要来定。

BTW: Gavin King强烈不建议使用composite-id,强烈建议使用UserType。

因此,如果你在系统设计的时候,遵循如下原则:

1、使用Hibernate的id generator来生成无业务意义的主键,不使用有业务含义的字段做主键,不使用assigned。

2、使用对象类型(String/Integer/Long/...)来做主键,而不使用基础类型(int/long/...)做主键

3、不使用composite-id来处理复合主键的情况,而使用UserType来处理该种情况。


那么你永远用的是unsaved-value="null" ,不可能用到any/none/..了。

c:/users/32251/appdata/local/arduino15/packages/esp32/esp32/tools/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\32251\AppData\Local\Temp\arduino\sketches\DB844BFC4EE8887A797F0FFD059BB81E\sketch\sketch_sep18a.ino.cpp.o:(.literal._Z5setupv+0x38): undefined reference to `initPins()' c:/users/32251/appdata/local/arduino15/packages/esp32/esp32/tools/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\32251\AppData\Local\Temp\arduino\sketches\DB844BFC4EE8887A797F0FFD059BB81E\sketch\sketch_sep18a.ino.cpp.o:(.literal._Z5setupv+0x3c): undefined reference to `initPWM()' c:/users/32251/appdata/local/arduino15/packages/esp32/esp32/tools/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\32251\AppData\Local\Temp\arduino\sketches\DB844BFC4EE8887A797F0FFD059BB81E\sketch\sketch_sep18a.ino.cpp.o:(.literal._Z5setupv+0x40): undefined reference to `testAllMotors()' c:/users/32251/appdata/local/arduino15/packages/esp32/esp32/tools/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\32251\AppData\Local\Temp\arduino\sketches\DB844BFC4EE8887A797F0FFD059BB81E\sketch\sketch_sep18a.ino.cpp.o:(.literal._Z4loopv+0x40): undefined reference to `readInfraredSensors()' c:/users/32251/appdata/local/arduino15/packages/esp32/esp32/tools/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\32251\AppData\Local\Temp\arduino\sketches\DB844BFC4EE8887A797F0FFD059BB81E\sketch\sketch_sep18a.ino.cpp.o:(.literal._Z4loopv+0x44): undefined reference to `setMotorSpeed(int, int)' c:/users/32251/appdata/local/arduino15/packages/esp32/esp32/tools/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\32251\AppData\Local\Temp\arduino\sketches\DB844BFC4EE8887A797F0FFD059BB81E\sketch\sketch_sep18a.ino.cpp.o:(.literal._Z4loopv+0x48): undefined reference to `printDebugInfo(int, int, int)' c:/users/32251/appdata/local/arduino15/packages/esp32/esp32/tools/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\32251\AppData\Local\Temp\arduino\sketches\DB844BFC4EE8887A797F0FFD059BB81E\sketch\sketch_sep18a.ino.cpp.o: in function `setup()': C:\Users\32251\AppData\Local\Temp\.arduinoIDE-unsaved2025818-1512-157dr56.bzym\sketch_sep18a/sketch_sep18a.ino:52: undefined reference to `initPins()' c:/users/32251/appdata/local/arduino15/packages/esp32/esp32/tools/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\32251\AppData\Local\Temp\.arduinoIDE-unsaved2025818-1512-157dr56.bzym\sketch_sep18a/sketch_sep18a.ino:52: undefined reference to `initPWM()' c:/users/32251/appdata/local/arduino15/packages/esp32/esp32/tools/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\32251\AppData\Local\Temp\.arduinoIDE-unsaved2025818-1512-157dr56.bzym\sketch_sep18a/sketch_sep18a.ino:67: undefined reference to `testAllMotors()' c:/users/32251/appdata/local/arduino15/packages/esp32/esp32/tools/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\32251\AppData\Local\Temp\arduino\sketches\DB844BFC4EE8887A797F0FFD059BB81E\sketch\sketch_sep18a.ino.cpp.o: in function `loop()': C:\Users\32251\AppData\Local\Temp\.arduinoIDE-unsaved2025818-1512-157dr56.bzym\sketch_sep18a/sketch_sep18a.ino:81: undefined reference to `readInfraredSensors()' c:/users/32251/appdata/local/arduino15/packages/esp32/esp32/tools/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\32251\AppData\Local\Temp\.arduinoIDE-unsaved2025818-1512-157dr56.bzym\sketch_sep18a/sketch_sep18a.ino:98: undefined reference to `setMotorSpeed(int, int)' c:/users/32251/appdata/local/arduino15/packages/esp32/esp32/tools/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\32251\AppData\Local\Temp\.arduinoIDE-unsaved2025818-1512-157dr56.bzym\sketch_sep18a/sketch_sep18a.ino:101: undefined reference to `printDebugInfo(int, int, int)' c:/users/32251/appdata/local/arduino15/packages/esp32/esp32/tools/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\32251\AppData\Local\Temp\.arduinoIDE-unsaved2025818-1512-157dr56.bzym\sketch_sep18a/sketch_sep18a.ino:111: undefined reference to `setMotorSpeed(int, int)' c:/users/32251/appdata/local/arduino15/packages/esp32/esp32/tools/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\32251\AppData\Local\Temp\.arduinoIDE-unsaved2025818-1512-157dr56.bzym\sketch_sep18a/sketch_sep18a.ino:114: undefined reference to `setMotorSpeed(int, int)' c:/users/32251/appdata/local/arduino15/packages/esp32/esp32/tools/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\32251\AppData\Local\Temp\.arduinoIDE-unsaved2025818-1512-157dr56.bzym\sketch_sep18a/sketch_sep18a.ino:117: undefined reference to `setMotorSpeed(int, int)' c:/users/32251/appdata/local/arduino15/packages/esp32/esp32/tools/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\32251\AppData\Local\Temp\.arduinoIDE-unsaved2025818-1512-157dr56.bzym\sketch_sep18a/sketch_sep18a.ino:120: undefined reference to `setMotorSpeed(int, int)' collect2.exe: error: ld returned 1 exit status exit status 1 Compilation error: exit status 1
09-19
用了cherry-pick -n,还是不行。 admin@DESKTOP-DHKB1BT MINGW32 /d/TPwork/vms-front-stage (lqn/feat/aio-v1.0-iframe-clean) $ git cherry-pick -n 5a282eed4b admin@DESKTOP-DHKB1BT MINGW32 /d/TPwork/vms-front-stage (lqn/feat/aio-v1.0-iframe-clean) $ git add . admin@DESKTOP-DHKB1BT MINGW32 /d/TPwork/vms-front-stage (lqn/feat/aio-v1.0-iframe-clean) $ git commit -n -m "feat(test-iframe): 新增central视图改造测试代码" [lqn/feat/aio-v1.0-iframe-clean 3bf2f131b6] feat(t-n est-iframe): 新增central视图改造测试代码 5 files changed, 200 insertions(+), 2 deletions(-) create mode 100644 src/views/vms/test/Index.vue admin@DESKTOP-DHKB1BT MINGW32 /d/TPwork/vms-front-stage (lqn/feat/aio-v1.0-iframe-clean) $ git log -1 commit 3bf2f131b60e3a5b980feb0ec7b712100b0974fc (HEAD -> lqn/feat/aio-v1.0-iframe-clean) Author: luqiunan <luqiunan@tp-link.com.hk> Date: Sun Jan 4 15:22:22 2026 +0800 feat(t-n est-iframe): 新增central视图改造测试代码 Change-Id: I7a4d13b612596a94af2b198dede46b8669310679 admin@DESKTOP-DHKB1BT MINGW32 /d/TPwork/vms-front-stage (lqn/feat/aio-v1.0-iframe-clean) $ git push origin HEAD:refs/for/lqn/feat/aio-v1.0-iframe Enumerating objects: 27, done. Counting objects: 100% (27/27), done. Delta compression using up to 24 threads Compressing objects: 100% (11/11), done. Writing objects: 100% (15/15), 3.80 KiB | 1.90 MiB/s, done. Total 15 (delta 10), reused 4 (delta 3), pack-reused 0 remote: Resolving deltas: 100% (10/10) remote: Counting objects: 56992, done remote: Processing changes: refs: 1, done remote: ERROR: Implicit Merge of 5028f13 fix(playback): 修复回放设备状态判断兼容Removed状态的设备 remote: ERROR: Implicit Merge of 511bdab Merges pull request #11764 remote: ERROR: Implicit Merge of 167671e fix(player): mediaServer使用nvr拉流,添加设备状态错误显示,修复webrtc重复拉流参数更新问题 remote: ERROR: Implicit Merge of fc93ec5 Merges pull request #11760 remote: ERROR: Implicit Merge of f3f6313 fix(device): 修改判断子IPC的逻辑 remote: ERROR: Implicit Merge of 50aed67 fix(recording): 修复stream type提示在暗黑模式的问题 remote: ERROR: Implicit Merge of c696233 Merge branch 'base/aio-v1.0' of ssh://webtoolkit.ep.tp-link.com:6611/fe-project-config/vms into yzj/fix/aio-v1.0-device remote: ERROR: Implicit Merge of f00d808 Merges pull request #11747 remote: ERROR: Implicit Merge of f40fbe1 fix(upgrade-device): 设备配置在线升级适配新接口 remote: ERROR: Implicit Merge of d25a90b fix(device): 部分设备状态不支持查询详情,这轮提测暂不开放 remote: ERROR: Implicit Merge of 675bac5 Merges pull request #11746 remote: ERROR: Implicit Merge of 5b7c26d fix(usePlayInfo): 新增removed状态下不存储channel的情况 remote: ERROR: Implicit Merge of 7e0bda2 Merges pull request #11743 remote: ERROR: Implicit Merge of f0664ea fix(device): 升级中判断字段更新 remote: ERROR: Implicit Merge of ef6915b fix(device): 收养权限适配 remote: ERROR: Implicit Merge of a0d83e1 fix(device): AIO升级订阅适配子IPC remote: ERROR: Implicit Merge of cca1990 fix(video): 一体机不支持设备收藏 remote: ERROR: Implicit Merge of 983da2e Merges pull request #11741 remote: ERROR: Implicit Merge of 9d1424c fix(var.less): 修复编译问题 remote: ERROR: Implicit Merge of b87299a Merges pull request #11740 remote: ERROR: Implicit Merge of c29c699 fix(log): 修复operation-log category文案错误,补充筛选项 remote: ERROR: Implicit Merge of 61017ca fix(thumbnail): 更新arch player包 remote: ERROR: Implicit Merge of 5583d06 Merges pull request #11739 remote: ERROR: Implicit Merge of 4e2ac3e fix(nav): 放出general settings,central提供后再删除 remote: ERROR: Implicit Merge of 9a29ede Merges pull request #11738 remote: ERROR: Implicit Merge of 2b94fd9 fix(playback): 修改回放单击视频画面触发空格事件参数 remote: ERROR: Implicit Merge of d9d67c4 Merges pull request #11718 remote: ERROR: Implicit Merge of a524d89 Merges pull request #11736 remote: ERROR: Implicit Merge of 7f046a9 Merges pull request #11737 remote: ERROR: Implicit Merge of f1c7205 fix(device-tag): 修复权限问题,无设备配置权限不允许增删改,允许查看和筛选 remote: ERROR: Implicit Merge of 47d2a34 Merge branch 'base/aio-v1.0' of http://webtoolkit.ep.tp-link.com:6610/fe-project-config/vms into dcl/fix/keyboard-shortcut remote: ERROR: Implicit Merge of 70b09d8 fix(alarm-server): 同步bug1187020 nvr4064不支持attach image配置项 remote: ERROR: Implicit Merge of f71c15d refactor(video): 添加并修改video模块的popover颜色规范 remote: ERROR: Implicit Merge of 4bf3aee fix(alarm-message): 修复子ipc的alarm message模块被屏蔽了alarm message开关问题 remote: ERROR: Implicit Merge of e0ed37d Merges pull request #11733 remote: ERROR: Implicit Merge of 96a71ea feat(event): event缩略图适配device label remote: ERROR: Implicit Merge of 8b40c4d Merges pull request #11703 remote: ERROR: Implicit Merge of f28db55 Merges pull request #11728 remote: ERROR: Implicit Merge of 66e0860 Merges pull request #11721 remote: ERROR: Implicit Merge of d3dcd25 Merges pull request #11720 remote: ERROR: Implicit Merge of 7cdd195 Merges pull request #11726 remote: ERROR: Implicit Merge of 963bedb Merges pull request #11731 remote: ERROR: Implicit Merge of 4b3b7c8 Merges pull request #11730 remote: ERROR: Implicit Merge of cc7e7eb fix(ai-search): 使用箭头函数 remote: ERROR: Implicit Merge of f6f5e5c fix(ddns): 修复enum的类型报错 remote: ERROR: Implicit Merge of 986c58c Merge branch 'base/aio-v1.0' of ssh://webtoolkit.ep.tp-link.com:6611/fe-project-config/vms into yzj/fix/aio-v1.0-device remote: ERROR: Implicit Merge of 6c9e500 fix(copy-to): bug1183360 copy to功能全选时携带了nvr id remote: ERROR: Implicit Merge of 3870007 fix(enum-const): 修复自测发现enum定义写法异常问题 remote: ERROR: Implicit Merge of 30a3311 Merge branch 'base/aio-v1.0' of ssh://webtoolkit.ep.tp-link.com:6611/fe-project-config/vms into wyj/fix/aio-v1.0 remote: ERROR: Implicit Merge of 1fb8c4a refactor(ai-search): 删除替换try catch remote: ERROR: Implicit Merge of 590a383b Merges pull request #11729 remote: ERROR: Implicit Merge of 0124c76 refactor: 修改依赖引入顺序 remote: ERROR: Implicit Merge of a14778c fix(device-tag): 修复从设备详情中修改tag后,设备配置表格的tag筛选列表未更新的问题 remote: ERROR: Implicit Merge of cea08f2 fix(unsaved-edit): 修复network-settings未保存编辑提示的交互异常 remote: ERROR: Implicit Merge of f305947 feat(live-view/playback): 修改暂停键的气泡箭头位置,以免在边缘处错位 remote: ERROR: Implicit Merge of 8832920 Merge branch 'dcl/fix/keyboard-shortcut' of http://webtoolkit.ep.tp-link.com:6610/fe-project-config/vms into dcl/fix/keyboard-shortcut remote: ERROR: Implicit Merge of 8962745 fix(ai-search): 调整引用顺序 remote: ERROR: Implicit Merge of 2cb972d refactor(video): 修改快捷键提示颜色为定义后的颜色变量 remote: ERROR: Implicit Merge of ca227c4 fix(ipc): 修复无直播权限时device info无占位的问题 remote: ERROR: Implicit Merge of 0c30e79 refactor(live-view/playback): 修改颜色为定义后的颜色变量 remote: ERROR: Implicit Merge of 323f2f2 fix(device-info nvr): Bug 1190544 - 【迭代2.0】【多客户端】样机设置容错模式的主路由为LAN2,查看VCT&VMS informantion中的主路由信息为LAN1,和实际不符 remote: ERROR: Implicit Merge of cfff8ff refactor: 修改绑定时机,减少性能消耗 remote: ERROR: Implicit Merge of e472115 fix(scale): 缩放tip隐藏时机补充 remote: ERROR: Implicit Merge of 532c73b feat(live-view/playback): 修改popover样式细节 remote: ERROR: Implicit Merge of 43f355d feat(ai-search): 图片下载适配device label remote: ERROR: Implicit Merge of 1e46641 feat(ai-search): 新增图片下载操作差异化适配 remote: ERROR: Implicit Merge of 5c39c7a fix(thumbnail): downloadJpeg接收到对应图片后取消监听器 remote: ERROR: Implicit Merge of 8992e04 Merge branch 'base/aio-v1.0' of ssh://webtoolkit.ep.tp-link.com:6611/fe-project-config/vms into wxy/feat/aio-v1.0-thumbnail remote: ERROR: Implicit Merge of 1daf3c7 refactor(thumbnail): 提取generateFileName函数 remote: ERROR: Implicit Merge of 60b10e5 fix(play-tool): 多视口操作栏交互优化 remote: ERROR: Implicit Merge of 4d64e59 Merge branch 'ljj/feat/aio-v1.0/webrtc-player' of http://webtoolkit.ep.tp-link.com:6610/fe-project-config/vms into ljj/feat/aio-v1.0/webrtc-player remote: ERROR: Implicit Merge of d47ac4e fix(webrtc): 竞速流预加载流程修复 remote: ERROR: Implicit Merge of a979ebe feat: 新增快捷键应用于聚焦视口 remote: ERROR: Implicit Merge of 1638e6f fix(racing): 竞速流报错时,中止全部拉流方式,走入重试机制 To ssh://gerrit-ssh.rd.tp-link.com:29418/VMS/UI/vms-front-stage ! [remote rejected] HEAD -> refs/for/lqn/feat/aio-v1.0-iframe (implicit merges detected) error: failed to push some refs to 'ssh://gerrit-ssh.rd.tp-link.com:29418/VMS/UI/vms-front-stage'
01-05
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值