JPA基础知识(四):映射关联关系

深入理解JPA中的关联关系 本文还有配套的精品资源,点击获取 简介:Java Persistence API(JPA)作为Java平台的关系数据库数据管理标准,提供了对象/关系映射(ORM)机制。JPA的关联关系是对象与数据库表映射的核心,包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)四种类型。通过注解来定义这些关系,并可配置... 阅读详情

相关文章:
JPA基础知识(一):简介、基本注解
JPA基础知识(二):使用JPA持久化对象的步骤
JPA基础知识(三):相关接口/类
JPA基础知识(四):映射关联关系

JPA映射关联关系

  1. 映射单项多对一的关联关系(常用)
  2. 映射单项一对多的关联关系
  3. 映射双向多对一的关联关系
  4. 映射双向一对一的关联关系
  5. 映射双向多对多的关联关系

一、单项多对一的关联关系

客户实体:
客户实体类及数据库表
Customer【一】 中没有 Order【多】

订单实体:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Order【多】 中有 Customer【一】
“多” 中含有外键

测试映射关系:

  • 【增】
    在这里插入图片描述
    建议:
    保存“多对一时”,先保存“一”,后保存“多”;这样不会有多余的update语句。
  • 【查】
    在这里插入图片描述
  • 【删】
    删 “ 多 ” 的一方
    不能直接删除 “ 多 ” 的一方,因为有外键约束
  • 【改】
    在这里插入图片描述

二、单项一对多的关联关系

客户实体:
客户实体类及数据库表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
" 一 " 的有外键

订单实体:
在这里插入图片描述

测试映射关系:

  • 【增】
    在这里插入图片描述
    一对多关联关系进行保存时,一定会多出update,因为多的一端不会保存外键列。
  • 【查】
    在这里插入图片描述
  • 【删】
    在这里插入图片描述
  • 【改】
    在这里插入图片描述

三、双向多对一的关联关系

双方的外键列名需要一致;

客户实体:
客户实体类及数据库表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

订单实体:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试映射关系:

  • 【增】
    在这里插入图片描述
    在双向 1 => n 的关联关系,执行保存时:
    [1.] 若先保存 n 的一端,在保存 1 的一端,默认情况下会多出 n 条update语句;
    [2.] 若先保存 1 的一端,则会多出 x 条update语句
    建议:
    在进行双向1 => n关联关系是,建议使用 n 的一方来维护关联关系, 这样会有效减少SQL语句。

四、双向一对一的关联关系

经理和部门的关系

经理实体:
在这里插入图片描述
在这里插入图片描述

部门实体:
在这里插入图片描述
在这里插入图片描述

测试代码:

  • 【增】
    在这里插入图片描述
  • 【查】
    在这里插入图片描述
    先获取不维护关系的一方,也一样。

五、双向多对多的关联关系

双向多对多必须由一方放弃维护多对多关系,否则中间表会出现主键重复的问题。
商品和类别的关系

类别实体类
在这里插入图片描述

商品表实体类
在这里插入图片描述
在这里插入图片描述

测试映射代码:
-【增】
在这里插入图片描述
-【查】
在这里插入图片描述

从OSGB到3DTiles:倾斜摄影数据高效转换实战指南 本文提供了将倾斜摄影OSGB数据高效转换为Web友好的3DTiles格式的完整实战指南。详细介绍了使用开源工具进行转换的步骤,包括环境搭建、核心命令、参数调优及在Cesium中加载与问题排查,旨在帮助GIS开发者和三维应用工程师打通数据到Web展示的最后一公里,实现大规模三维模型的流畅网络发布。 阅读详情

相关推荐

NMOS管和PMOS管做开关控制电路

NMOS管和PMOS管做开关控制电路

while(1) 3万+

JPA映射关系

单向多对一 场景 一个顾客N个订单,一个订单属于1个顾客。 // Order.class @JoinColumn(name="buyer_id")// 映射外键列名 // 及时查询(默认):fetch=FetchType.EAGER、懒加载:fetch=FetchType.LAZY @ManyToOne // 映射单向多对一。 publice Buyer getBuyer(){ return buyer; } 测试 保存 @Test public void persist() { Buyer b

松林羊的博客 588

使用RepeatModeler和RepeatMasker注释基因组重复序列

重复序列注释有两种常用策略,基于同源序列相似性和基于重复序列结构特征。RepeatMasker是基于同源序列相似性注释序列的常用工具, RepeatModeler可用来从头对基因组的重复序列家族进行建模注释,它的核心组件是RECON和RepatScout。 这篇教程介绍如何使用RepeatModeler从头鉴定基因组的重复序列,之后用RepeatMasker根据自...

xuzhougeng blog 8849

JPA学习(五) 五种 映射关系

一、JPA_映射单向多对一的关联关系 1、创建实体类 //订单 @Table(name="JPA_ORDER") @Entity public class Order { private Integer id; private String orderName; private Customer customer; @Id @GeneratedValue public ...

殇莫忆的博客 1072

Genesis物理引擎实战指南:轻量级确定性刚体仿真核心

刚体物理仿真作为机器人控制、嵌入式运动学验证和确定性游戏开发的基础技术,其核心在于数值稳定性、跨平台可复现性与约束求解精度。本文围绕线性互补问题(LCP)求解、半隐式欧拉积分和零依赖C++实现三大关键技术展开,解析如何在无GUI、低算力环境下构建可单步调试、帧级可控的确定性仿真系统。重点覆盖碰撞检测数学建模、关节局部坐标系绑定、质量-惯性张量一致性校验等工程落地关键点,适用于STM32、树莓派及教育实验场景。内容深度结合Genesis Physics Engine的源码实践,直击‘穿模’‘NaN’‘关节发软

ciya3282的博客 1589

从入门到精通:用友BIP旗舰版全模块实施与运维实战指南

本文详细介绍了用友BIP旗舰版的全模块实施与运维实战指南,涵盖财务云、供应链云、生产制造等核心模块的配置与优化技巧。通过渐进式学习法和实战案例,帮助用户从入门到精通,提升系统实施效率和运维能力,特别适合企业IT人员和实施顾问参考。

weixin_29207533的博客 899

Spring Boot 入门系列(二十八) JPA 的实体映射关系,一对一,一对多,多对多关系映射!...

前面讲了Spring Boot 使用 JPA,实现JPA的增、删、改、查的功能,同时也介绍了JPA的一些查询,自定义SQL查询等使用。JPA使用非常简单,功能非常强大的ORM框架,无需任何数据访问层和sql语句即可实现完整的数据操作方法。但是,之前都是介绍的单表的增删改查等操作,多表多实体的数据操作怎么实现呢?接下来聊一聊JPA 的一对一,一对多,多对一,多对多等实体映射关系。 一、常用注解...

章为忠的专栏 3505

硬方案——几种实用的恒流源电路设计方案,敬请收藏(运放、三极管在手,让你玩出多种花样)

0 引言 我们在信号测量、供电等应用场景时常会涉及到使用恒流源,以前觉得恒流源挺神奇的,研究了下实现方案,其实也没有多么高深(这里讨论的仅限于用在信号测量中的小电流恒流源设计),这里给出几个实用的恒流源电路设计方案。 1 恒流源电路设计 (1)使用三极管搭建的恒流源 (2)使用运放搭建的恒流源 (3)使用恒流二极管搭建的恒流源 pt100恒流源测温电路图_电子技术_电工之家 ...

数字世界 万物互联 9524

使用 JPA 进行对象关系映射-与数据库的轻松交互

通过 JPA,Java 开发者能够快速地实现对象与关系数据库之间的映射。通过定义实体类及其注解,开发者可以避免繁琐的 SQL 操作,实现数据的持久化处理。此外,JPA 提供了灵活的查询机制及关系映射能力,使得数据库操作更具可读性和扩展性。在现代 Java 项目中,JPA 是构建稳定持久层的优选方案。

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 922

【Matlab】多旋翼无人机视觉伺服跟踪控制程序

本文介绍了基于Matlab的多旋翼无人机视觉伺服跟踪控制程序开发方法。该系统采用视觉感知、坐标转换、伺服控制和仿真验证四个核心模块,通过HOG+SVM目标检测、Shi-Tomasi特征提取和PID双闭环控制算法实现动态目标跟踪。详细阐述了相机标定、目标检测、坐标转换及伺服控制等关键环节的Matlab实现代码,并进行了仿真验证。结果表明该系统在±0.1m的跟踪精度下可实现100Hz的实时处理,适用于室内外复杂场景。文章还提出了工程应用中的优化建议,为无人机视觉伺服系统的开发提供了完整的技术方案。

unber的博客 505

22、云数据中心网络(DCN)部署最佳实践

本文详细介绍了云数据中心网络(DCN)部署的最佳实践,涵盖SDN设计、服务网络规划、管理网络规划等方面。通过合理的架构设计、路由规划和组件协同,提升数据中心的自动化水平、可靠性及安全性,以满足不断增长的业务需求。

d6e7f8的博客 186

JPA关系映射

JPA一对多双向1-m:多的一方为关系维护端,关系维护端负责外键纪录的更新,关系被维护端没有权力更新外键纪录. 拥有mappedBy注解的实体类为关系被维护端,另外的实体类为关系维护端的。顾名思意,关系的维护端对关系(在多对多为中间关联表)的CRUD做操作。关系的被维护端没有该操作,不能维护关系。@ManyToOne表示一个多对一的映射,该注解标注的属性通常是数据库表的外键

哇哈哈 5522

015、PCIE带宽计算:理论vs实际——调试手记

最近在调一块图像采集卡,主控抱怨数据吞吐量上不去。规格书上写着PCIE 3.0 x4,理论带宽接近4GB/s,实际测试却卡在2.5GB/s左右。硬件同事拍胸脯说链路训练正常,软件同事咬定DMA配置没问题——这种场景是不是很熟悉?

z534437748的博客 880

jpa的关联关系

QQ617923457的专栏 1228

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

JPA 学习笔记 3:映射关联关系

这篇JPA学习笔记主要讲解了三种关联关系的映射方式: 单向多对一关联:通过@ManyToOne和@JoinColumn注解实现,强调先保存主表实体再保存从表实体的优化策略,以及查询、修改和删除操作。 单向一对多关联:使用@OneToMany注解,分析了新增时会产生额外UPDATE语句,默认懒加载查询,以及删除时的级联行为。 双向一对多关联:简要提及通过mappedBy属性实现双向关联。 文章通过具体代码示例展示了各种关联关系的实现方式,并详细说明了每种操作(增删改查)的底层SQL执行逻辑和优化建议。

梦幻天空 712

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JPA框架

一、JPA 介绍 1、JDBC 2、JPA是什么 二、搭建 JPA 环境 三、JPA 注解 四、JPA API 1、缓存 2、EntityManager 3、API 五、关联关系映射 1、一对一映射 2、单向一对多 3、单向多对一 4、双向一对多及多对一 5、双向多对多 六、JPQL 1、createQuery 2、createNativeQuery......

CZW2181119177的博客 1万+

JPA映射关联关系-双向多对多

JPA映射关联关系-双向多对多 一个分类有多个小分类(条目),一个条目属于多个分类,这就形成了多对多的关系。 各实体类如下: package com.ppl.entity; import java.util.HashSet; import java.util.Set; import javax.persistence.Column; import javax.persistenc

pplsunny----舞动青春 670

JPA关联关系映射

JPA关联关系映射

刘木匠 499

【JavaWeb】一文学会JPA

JPA(Java Persistence API)是用于对象持久化的API,是Java EE平台标准的ORM规范,使得应用程序以统一的方式访问持久层。

请你喝杯Java 5279

Hibernate,JPA 对象关系映射之关联关系映射策略

关联关系映射关联关系映射,是映射关系中比较复杂的一种映射关系,总的说来有一对一、一对多和多对多几种关系。细分起来他们又有单向和双向之分。下面我们逐一介绍一下。单向 OneToOne单向一对一是关联关系映射中最简单的一种,简单地说就是可以从关联的一方去查询另一方,却不能反向查询。我们用下面的例子来举例说明,清单 1 中的 Person 实体类和清单 2 中的 Address 类就是这种单向的一对一关系

来啊 快活啊 967

JPA_映射关联关系

一:单项多对一的关联关系 例如:订单和客户 1.新创建订单类 package com.atguigu.jpa.helloworld; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax....

weixin_30546189的博客 87

JPA中实现单向一对多的关联关系

场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.youkuaiyun.com/BADAO_LIUMANG_QIZHI/article/details/103473937 JPA中实现单向多对一的关联关系: https://blog.youkuaiyun.com/BADAO_LIUMANG_QIZHI/article/details/103511623 在上面搭建好JPA...

BADAO_LIUMANG_QIZHI的博客 664

JPA映射双向多对多的关联关系

在双向多对多关系中,我们必须指定一个关系维护端(owner side),可以通过 @ManyToMany 注释中指定 mappedBy 属性来标识其为关系维护端 12345678910111213141516171819202122232425262728293031323334353637383940414243...

nostrud ipsum6 117

JPA映射关联关系-双向一对多

JPA映射关联关系-双向一对多 双向一对多 = 双向多对一 什么是双向? 我们来对比一下单向和双向 单向/双向 Customer实体类中是否有List orders/Set orders Order实体类中是否有Customer 单向多对一 无 有 单向一对多 有 无 双向一对多(双向多对一) 有 有

pplsunny----舞动青春 623

spirng data JPA教程(三) 关联关系注解的使用

spirng data JPA实战(三) 关联关系注解的使用 ​ 上一篇文章讲了spring data JPA实体类中相关注解的使用方法,这次讲下关联关系注解的使用,关联关系注解主要用来做联表的增删改查操作。 项目地址 ​ spring data JPA 中关联关系的注解是与表间的关系相对应的,具体包括: OneToOne (一对一关系),OneToMany(一对多),ManyToOne(多对一)...

独钓寒江雪 3555

JPA映射双向一对多的关联关系

双向一对多关联关系 一的一方1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818...

测试 254
上一篇: JPA基础知识(三):相关接口/类
下一篇: JPA之JPQL(一)
Xxacker的Latitude
博客等级 码龄9年 64粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值