(Hibernate)cascade

Hibernate框架基础——cascade属性 我们以部门和员工的关系为例讲解一对多关联关系映射时,删除部门时,如果部门有关联的员工且inverse属性为false,那么由于可以维护关联关系,它就会先把关联的员工的外键列设为null值,再删除自己。但是此刻希望删除部门时,就附带着把该部门下的所有员工都删掉,这时就需要引入cascade属性了。级联(cascade)当Hibernate持久化一个临时对象时,在默认情况下,它不会自动持久化所关联的其他 阅读详情

利用关联关系操作对象:
数据对象之间的关联关系有一对一,一对多及多对多三种。在数据库操作中,数据对象之间的关联关系使用JDBC处理很困难。例如,当删除一个班级的信息时,还要删除该班级的所有学生的基本信息。如果直接使用JDBC执行这种级联操作,会非常繁锁。Hibernate通过把实体对象之间的关联关系及级联关系在映射文件中声明,比较简单地解决了这类级联操作问题。
一对一关联关系的使用:
一对一关联关系在实际生活中是比较觉的,例如学生与学生证的关系,通过学生证可以找到学生。一对一关联关系在Hibernate中的实现有两种方式,分别是主键关联和外键关联。
主键关联:
主键关联的重点是,关联两个实体共享一个主键值。例如student与card是一对一关系,它们在数据库中对应的表分别是t_student和 t_card。它们共用一个主键值ID,这个主键可由t_student或t_card表生成。问题是如何让另一张表引用已经生成的主键值呢?例如,t_student表未老先衰了ID的值,t_card表如何引用它?这需要在Hibernate的映射文件中使用主键的foreign生成机制!

为了表示Student与Card之间的一对一的关联关系,我们需要在它们各自的映射文件 中都要使用<one-to-one>标记!
一对一关系我在前面已经写过例子程序了,在这里仅给出两个映射文件。如下:
学生PO映射信息:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>

<hibernate-mapping>
    
<class name="hibernate.PO.TStudent" table="t_student" lazy="true"><!--把类与表关联起来 -->
        
<id name="id" type="java.lang.Integer">
            
<column name="id"/>
            
<generator class="increment" />
        
</id>
        
<property name="userName" type="java.lang.String">
            
<column name="userName" length="20" />
        
</property>
        
<property name="cardId" type="java.lang.String">
            
<column name="card_id" length="20" />
        
</property>
        
<property name="sex" type="java.lang.String">
            
<column name="sex" length="2" />
        
</property>
        
<property name="age" type="java.lang.Integer">
            
<column name="age" />
        
</property>
        
<one-to-one name="card" class="hibernate.PO.TCard" fetch="join" cascade="all" />
    
</class>
</hibernate-mapping>
<!--
class元素的lazy属性设定为true,表示延迟加载,如果lazy设为false,则
表示立即加载。以下对这二点进行说明。
    立即加载:表示Hibernate在从数据库中取得数据组装好一个对象(如学生1)后,
            会立即再从数据库取得数据组装此对象所关联的对象(如学生证1)。
    延迟加载:表示Hibernate在从数据库中取得数据组装好一个对象(如学生1)后,
            不会立即再从数据库中取得数据组装此对象所关联的对象(如学生1),
            而是等到需要时,才会从数据库取得数据组装此关联对象。
<one-to-one>元素的cascade属性表明操作是否从父对象级联到被关联的对象,    它
的取得可以是以下几种:
    none:在保存,删除或修改当前对象时,不对其附属对象(关联对象)进行级联
          操作。它是默认值。
    save-update:在保存,更新当前对象时,级联保存,更新附属对象(临时对象,
          游离对象)。
    delete:在删除当前对象时,级联删除附属对象。
    all:所有情况下均进行级联操作,即包含save-update和delete操作。
    delete-orphan:删除和当前对象解除关系的附属对象。
<one-to-one>元素的fetch属性的可选值是join和select,默认是select。
当fetch属性设定为join时,表示连接抓取(Join fetching):Hibernate通过
在Select语句中使用outer join(外连接)来获得对象的关联实例或者关联集合。
当fetch属性设定为select时,表示查询抓取(Select fetching):需要另外发
送一条Select语句抓取当前对象的关联实体或集合。
-->


学生证PO映射信息:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>

<hibernate-mapping>
    
<class name="hibernate.PO.TCard" table="t_card" lazy="true">
        
<id name="id" type="java.lang.Integer">
            
<column name="id"/>
            
<generator class="foreign">
                
<param name="property">student</param>
            
</generator>
        
</id>
        
<!-- id使用外键(foreign)生成机制,引用代号为student的对象
             的主键作为T_card表的主键和外键。同时student在下面的
             <one-to-one>中进行了定义 
-->
        
<property name="name" type="java.lang.String">
            
<column name="name" length="20" />
        
</property>
       
          
          
<one-to-one name="student" class="hibernate.PO.TStudent" constrained="true" />        
          
<!-- constrained="true"表示Card引用了student的主键作为外键。 -->
    
</class>
</hibernate-mapping>

 

外键关联:
外键关联的要点是:两个实体各自有不同的主键,但其中一个实体有一个外键引用另一个实体的主键。例如,假设,Student和Card是外键关联的一对一关系们在数据库中相应的表分别如下:t_student表有一个主键ID,t_card表有一个主键ID和一个外键student_id,此外键对应 t_student表的主键ID,那么student的映射信息如上面一样不做改动,而Card的映射文件要做相应的改动。如下:
<hibernate-mapping>
    
<class name="hibernate.PO.TCard" table="t_card" lazy="true">
        
<id name="id" type="java.lang.Integer">
            
<column name="id"/>
            
<generator class="increment"/><!-- 不再是foreign了 -->                 
        
</id>
        
        
<property name="name" type="java.lang.String">
            
<column name="name" length="20" />
        
</property>
       
       
<many-to-one name="student" column="student_id" class="hibernate.PO.TStudent" unique="true"/>
       
<!-- 惟一的多对一,实际上变成一对一关系了 -->
         
<!-- unique设为true表示使用DDL为外键字段生成一个惟一约束。
                 以外键关联对象的一对一关系,其本质上已经变成了一对多的双向关联,
                 应直接按照一对多和多对一的要求编写它们的映射文件。当unique为
                 true时实际上变成了一对一的关系。 
-->
           
    
</class>
</hibernate-mapping>

一对多关联关系的使用
一对多关系很觉,例如班级与学生的关系就是典型的一对多的关系。在实际编写程序时,一对多关系有两种实现方式:单向关联和双向关联。单向的一对多关系只需要在一方进行映射配置,而双向的一对多需要在关联的双方进行映射配置。下面以Group(班级)和Student(学生)为例讲解如何配置一对多的关系。
单向关联:
单向的一对多关系只需要在一方进行映射配置,所以我们只配置Group的映射文件:
<hibernate-mapping>
    
<class name="hibernate.PO.Group" table="t_group" lazy="true">
        
<id name="id" type="java.lang.Integer">
            
<column name="id"/>
            
<generator class="increment"/>                 
        
</id>
        
<!-- insert属性表示被映射的字段是否出现在SQL的INSERT语句中 -->
        
<property name="name" type="java.lang.String" update="true" insert="true">
            
<column name="name" length="20" />
        
</property>
        
        
<!-- set元素描述的字段对应的类型为java.util.Set类型。
            inverse用于表示双向关联中的被动一端。inverse的值
            为false的一方负责维护关联关系。
            sort排序关系,其可选值为:unsorted(不排序)。
                                  natural(自然排序)。
                                  comparatorClass(由某个实现了java.util.comparator接口的类型指定排序算法。)
            <key>子元素的column属性指定关联表(t_student表)的外键。
       
-->
        
<set name="students" 
             table
="t_student" 
             lazy
="true" 
             inverse
="false" 
             cascade
="all" 
             sort
="unsorted">
        
<key column="ID"/>
        
<one-to-many class="hibernate.PO.TStudent"/>        
        
</set>
    
</class>
</hibernate-mapping>
双向关联:
如果要设置一对多双向关联关系,那么还需要在“多”方的映射文件中使用<many-to-one>标记。例如,在Group与Student一对多的双向关联中,除了Group的映射文件外还需要在Student的映射文件中加入如下代码:
 <many-to-one name="group"
                     class
="Group"
                     cascade
="none"
                     outer-join
="auto"
                     update
="true"
                     insert
="true"
                     column
="ID" />

inert和update设定是否对column属性指定的关联字段进行insert和update操作。
此外将Group.hbm.xml中<set>元素的inverse设置为true.

多对多关联关系的使用
Student(学生)和Course(课程)的关系就是多对多关系。在映射多对多关系时需要另外使用一个连接表(如Student_Course)。 Student_Course表包含二个字段:courseID和studentID。此处它们的映射文件中使用<many-to- many>标记,在Student的映射文件中加入以下描述信息:

  <set name="courses" 
               table
="student_course" 
               lazy
="false" 
               inverse
="false"
               cascade
="save-update">
               
<key column="studentID" />
           
<many-to-many class="Course" column="CourseID"/>    
           
</set>
相应的Course的映射文件中加入以下:
 <set name="students" 
               table
="student_course" 
               lazy
="false" 
               inverse
="true"
               cascade
="save-update">
               
<key column="CourseID" />
           
<many-to-many class="Student" column="StudentID"/>    
           
</set>
添加关联关系:
首先编写一个程序来看看一个名为Bill的学生选择了什么课程:
//获取代表Bill的Student对象
        Student stu = (Student)session.createQuery("from Student s where s.name='Bill'").uniqueResult();
        List list 
= new ArrayList(stu.getCourses());
        
for(int i = 0 ; i < list.size(); i++)
        
{
            Course course 
= (Course)list.get(i);//取得Course对象
            System.out.println(course.getName());//打印出Bill所选课程的清单
        }
现在Bill还想chemistry课程,这对于程序员来说只是为Bill添加一个到chemistry的关联,也就是说在student_course表中新增加一条记录,而T_student和T_Course表都不用变更。
//获取代表Bill的Student对象
        Student stu = (Student)session.createQuery("from Student s where s.name='Bill'").uniqueResult();
        Course course 
= (Course)session.createQuery("from Course c where c.name='chemistry'").uniqueResult();
        
//设置stu与course的关联关系
        stu.getCourses().add(course);
        course.getStudents().add(stu);
删除关联关系:
删除关联关系比较简单,直接调用对象集合的remove()方法删除不要的对象就可。例如:要从学生Bill的选课清单中删除politics和chemistry两门课,程序代码如下:
        //获取代表Bill的Student对象
        Student stu = (Student)session.createQuery("from Student s where s.name='Bill'").uniqueResult();
        Course course1 
= (Course)session.createQuery("from Course c where c.name='politics'").uniqueResult();
        Course course2 
= (Course)session.createQuery("from Course c where c.name='chemistry'").uniqueResult();
        stu.getCourse().remove(course1);
//删除politics课程
        stu.getCourse().remove(course2);//删除chemistry课程
运行以上程序将从student_course表中删除这两条记录,但T_student和T_course表没有任何变化
这才是 Python 的正确玩法!用强化学习 (RL) 训练 AI 玩《王者荣耀》,胜率 90%! 大家打排位时,一定遇到过那种“意识神级、操作零失误”的对手,或者“走位呆滞、送人头”的队友。以前的“人机”是程序员写死的脚本(If 血量<20% Then 回城)。而现在的顶级 AI(如腾讯绝悟、OpenAI Five),是靠强化学习 (Reinforcement Learning)自己“左右互搏”练出来的。今天,我们不谈枯燥的数学公式,我将手把手教你用,搭建一个能玩 MOBA 游戏的 AI Agent。即使不能去 KPL 打职业,虐一下钻石局还是绰绰有余的! 阅读详情

相关推荐

断点回归(regression discontinuity design)学习笔记

本篇博文主要是对断点回归的一些学习和总结~ 学习材料如下: 1 断点回归设计RDD分类与操作案例 2 RDD断点回归, Stata程序百科全书式的宝典 3 断点回归设计的前沿研究现状, RDD 4 让“跳跃”更有意义:断点回归设计(RDD) 5 Stata: 断点回归 (RDD) 教程 6 怎么用通俗的语言解释断点回归?它与DID的区别是什么 7 Watering Down Environmental Regulation in China,Guojun He, Shaoda Wang, Bing Zhan

Claire_chen_jia的博客 9万+

Hibernate入门(五)hibernate的级联(cascade)表操作

存在的意义 在实际做项目的时候,经常会遇到表与表之间的关联操作,比如一个班级里面有多个学生,一个部门有多个职员,这是一对多的关系,还有例如一个主题有一个作者,这是一对一,等,这时候就必须涉及到表的关联操作 一对多的单项关联 什么意思呢? 比如一个班级里面有多个学生,班级表关联学生表,属于一对多,但是学生表并不关联班级表,这个就属于单项的关联  只能从classes

未来的路只有靠自己 467

H3C ACL的应用与配置1

SWHC1-acl-ipv4-adv-3000]rule 30 permit ip source 192.168.50.252 0 destination 192.168.70.252 0 //设置一条ID为30的过滤,允许源地址为 192.168.50.252 访问目的地址为192.168.70.252 的设备。高级ACL范围3000-3999:对源IP,目地IP,协议,端口号进行过滤。[SWHC1]acl number 3000 //创建高级ACL 3000。

weixin_41120428的博客 2425

Hibernate--cascade属性

cascade属性:表示级联。默认值为none。

白净垃圾桶- 512

【鸿蒙游戏上架审核规范指南】

华为鸿蒙游戏上架审核规范指南摘要

weixin_44161102的博客 918

From Manual to Magic: How nnU-Net is Revolutionizing Biomedical Image Segmentation Without Human Int

本文探讨了nnU-Net如何通过全自动深度学习技术革新生物医学图像分割领域。作为自我配置的智能系统,nnU-Net无需人工干预即可完成从数据预处理到模型训练的全流程,显著提升医学影像分割的效率和精度,尤其在CT和MRI影像分析中表现卓越。

metal的博客 1083

级联操作(CASCADE)

由于修改和删除比较麻烦,需要先操作从表,再操作主表 添加级联,当修改或者删除主表的数据时,从表也随之变化 创建语法: CREATE TABLE 从表明( id INT PRIMARY KEY AUTO_INCREMENT, 从表关联于主表id的字段名 INT, CONSTRAINT -- 声明 外键名称 FOREIGN KEY -- 外键作用在 (从表关联于主表id的字段名) REFERENCES -- 关联 主表明(主键i...

m0_70725839的博客 745

立创EDA + AI 生成 STM32 原理图教程1

AI辅助立创EDA设计STM32原理图教程摘要 本教程系统介绍如何利用AI工具(如Claude Code、DeepSeek等)与立创EDA专业版结合,实现STM32原理图的智能生成与优化。主要内容包括: 技术架构:采用分层设计,AI生成结构化网表数据,由立创EDA执行确定性绘图,确保可审查性 环境搭建:详细说明立创EDA专业版、Node.js等工具的安装配置 五种AI集成方案:包括官方AI Skill、MCP Server等不同实现方式 核心功能: 自动提取STM32引脚定义 智能元件选型与LCSC编号匹配

shihui2003的博客 1548

Hibernate的cascade属性

1.JPA中的CascadeType.ALL并不等于{CascadeType.PESIST,CascadeType.REMOVE,CascadeType.MERGE,CascadeType.REFRESH}   在Hibernate中调用session.save() or session.update()并不能触发 {CascadeType.PESIST,CascadeType.REMOV

zhu414037481的专栏 285

YOLOv8改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU)

本文记录的是改进YOLOv8的损失函数,将其替换成。现有研究通过利用边界框之间的几何关系来提高回归性能,但忽略了困难样本和简单样本分布对边界框回归的影响。不同检测任务中困难样本和简单样本的分布不同,对于简单样本占主导的检测任务,关注简单样本的边界框回归有助于提高检测性能;对于困难样本比例较高的检测任务,需要关注困难样本的边界框回归。,提高检测器在不同检测任务中的性能。实现的。

Limiiiing的博客 1221

YOLOv12优化:原创自研 | 带有注意力机制的隐藏状态混合器的状态空间(HSM-SSD),实现暴力涨点 | CVPR2025 EfficientViM

可以将 带有注意力机制的隐藏状态混合器的状态空间(HSM-SSD)中的注意力机制换成专栏其他注意力机制 ,那么你就能实现独一无二的原创。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 664

hibernate mysql cascade_hibernate cascade的真正含义

hibernate cascade 是 @OneToOne @OneToMany @ManyToOne @ManyToMany等注解的属性,表示级联操作。/*** (Optional) The operations that must be cascaded to* the target of the association.** By default no operations are cas...

weixin_29607637的博客 278

手把手教你学SIMULINK模块库文件专栏--Scope 模块详解

模块是 Simulink 中的一个信号接收模块,用于实时显示信号波形。该模块可以捕捉并可视化仿真过程中信号的变化,帮助用户直观地分析系统的动态行为。模块都能提供强有力的支持。通过深入了解其参数的影响及结合 MATLAB 脚本的应用,读者可以更加有效地利用这一模块进行仿真和研究。此外,通过实际应用场景的扩展以及常见问题解答部分的帮助,能够更好地掌握。模块是一个非常实用的工具,适用于需要实时显示信号波形的各种场景。模块的参数,可以进一步增强学习体验。模块参数的影响,下面我们将详细探讨每个参数如何影响波形显示。

MHD0815的博客 312

hibernate的级联----cascade

1.cascade=”none”,默认值,告诉Hibernate忽略关系。2.cascade=”save-update”告诉Hibernate在下面这些情况导航关联:当事务提交时,当对象传给save()或update()方法并保存新初始化的瞬时实例及把更改持久到分离实例时。3. cascade=”delete”告诉Hibernate当对象传给delete()时导航关联并删除持久实例。4.casca

soleghost的专栏 3609

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Hibernate的cascade有哪些

Cascade属性的取 1、none:忽略其他关联的对象,默认值。 2、save-update:当session通过save(),update(),saveOrUpdate()方法来保存或更新对象时,级联保存所有关联的新建的临时对象,并且级联更新所有关联的游离对象。 3、persist:当session通过persist()方法来保存当前对象时,会级联保存所有关联的新建的临时对象

lelong2002huyao的专栏 752

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java中的cascade,Hibernate中cascade作用

只有“关系标记”才有cascade属性;一个操作因级联cascade可能触发多个关联操作。前一个操作叫“主控操作”,后一个操作叫“关联操作”。cascade属性的可能值有all: 所有情况下均进行关联操作,即save-update和delete。none: 所有情况下均不进行关联操作。这是默认值。save-update: 在执行save/update/saveOrUpdate时进行关联操作。del...

weixin_33597080的博客 639

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Hibernate中Inverse和Cascade

Inverse和cascade是Hibernate映射中最难掌握的两个属性。两者都在对象的关联操作中发挥作用。 1.inverse属性:inverse所描述的是对象之间关联关系的维护方式。 inverse只存在于集合标记的元素中。Hibernate提供的集合元素包括<set/> <map/> <list/> <array /> <bag /&...

u014712365的博客 164

Hibernate 之 cascade 和 inverse

package com.test; import java.util.HashSet; import java.util.Set; /** * 测试-学校 * Created by zmf on 16/4/13. */ public class TestSchool { private int id; private String name; private

tengyuantuohai的专栏 624

hibernate 级联删除设置 cascade="delete" 无效

因为我的外键是在建表的时候,创建的。 当时把外键设置成了“ON DELETE NO ACTION ON UPDATE NO ACTION”(不进行删除,更新操作) 结果在映射文件中设置 cascade=“delete” 也不能进行删除 解决办法1: 代码解决(把这里的外键与表名改成自己的) ALTER TABLE crm.cst_linkman DROP FOREIGN KEY FK_cst_li...

weixin_43990136的博客 1504

Hibernate 级联操作 cascade

这是为了更新而更新···也为了记录下。其实这些也没什么记录的必要,差文档就知道了。就当赚点点击率了··也为了刚开通的博客让搜索引擎多收录点文章。 -------------------------------------------------------------------------------- 在hibernate中 有时候需要级联更新比如 级联 UPDATE,DELETE,I

2254

hibernate中cascade详解

我们以部门和员工的关系为例讲解一对多关联关系映射时,删除部门时,如果部门有关联的员工且inverse属性为false,那么由于可以维护关联关系,它就会先把关联的员工的外键列设为null值,再删除自己。但是此刻希望删除部门时,就附带着把该部门下的所有员工都删掉,这时就需要引入cascade属性了。级联(cascade)当hibernate持久化一个临时对象时,在默认情况下,它不...

weixin_34062469的博客 446

hibernate之级联cascade和关系维持inverse

hibernate的关联关系,重点在理解级联cascade和inverse   1、cascade一般用在级联保存,级联更新,级联删除上      1.1cascade注解有两种,一种是基于hibernate注解 org.hibernate.annotations.Cascade org.hibernate.annotations.CascadeType 支持一下级联 ALL, P

9823

hibernate mysql cascade_hibernate中 cascade属性详解

配置关联时,我们考虑两点:程序执行效率和实际业务需要,前面的例子中无论是单向的关联还是双向的关联,我们都要分别对实体类使用session.save()才能将数据保存至数据库。问题:如果保存数据非常多,那编码是一件恐怖的事情。有没有简单的方法呢?将标签cascade=all总结:我们只对district对象执行了持久化操作,但是通过sql语句,我们发现street执行了持久啊操作,这就是cascad...

weixin_39989668的博客 187

java中的cascade,Hibernate中的Inverse和cascade属性配置

Inverse和cascade是Hibernate映射中最难掌握的两个属性。两者都在对象的关联操作中发挥作用。1.明确inverse和cascade的作用inverse 决定是否把对对象中集合的改动反映到数据库中,所以inverse只对集合起作用,也就是只对one-to-many或many-to-many有效(因 为只有这两种关联关系包含集合,而one-to-one和many-to-one只含有关...

weixin_39747075的博客 214

Hibernate入门20 - cascade持久化

入门 20 - cascade持久化  在Java程序中,对象与对象之间会透过某些关系互相参考,如果有一个对象已经是持久化对象,被它参考的对象直觉上也应该要持久化,以维持对象之间关联的完整性,这是藉由可达性完成持久化(Persistence by reachability)的基本概念。 如果将对象之间的关联想象为一个树形图,从某一个持久化物件为树根出发,父节点若是持久化对象,则被父节点参考到的

chho的专栏 1458

hibernate mysql cascade_MySql和Hibernate中关于cascade的用法

在数据库里,进行增加、修改、删除记录的时候,经常会涉及到父子关系的表。例如:有省份表和城市表,其中城市表有一个外键province_id引用到省份表的主键。这样,可以把省份表看成是父表,把城市表看成是子表,城市表记录的存在依赖于省份表的记录。(文中提到的例子,所有的代码在附件里都有,所以这里的描述从简)一、在MySQL里的cascade以下直接在MySQL的控制台操作省份表和城市表在省份表增加一条...

weixin_42298270的博客 140
上一篇: Java垃圾收集机制
下一篇: Ajax与XMLHttpRequest对象
井中月
博客等级 码龄21年 5粉丝 108原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值