关于使用级联分类器人脸识别的菜鸟提问感谢! 3C

最近学习需要使用级联分类器进行人脸识别,由于之前不是计算机专业的,可能有些根本性问题搞的不明白,特向大神们学习一下,如果涉及基础知识,您可告诉我下知识点是什么我自己去找资料学习。谢谢!

不明白限定符const在此的作用,以及为何都要加上&?

该段代码是整个程序中识别人脸的函数定义部分,已联系不上原作者(毕业),结合OPENCV官方级联分类器的样例程序,不懂都加上&是什么意思。

我理解该函数应该是返回若干个Rect放入到 roi_rects_face容器中,但是哪个语句完成了这个功能?

首次提问,有不合适的地方我尽快修改!谢谢!
主程序调用函数语句

 std::vector<Rect> roi_rects_face;
    detectFace(gray, m_cascade_face, roi_rects_face);

定义函数:

void detectFace(const cv::Mat &gray, cv::CascadeClassifier &cascade, std::vector<cv::Rect> &rects)
{
    if( !gray.empty() )//读取图片数据不能为空
    {
        cv::Mat copyImg(gray.rows, gray.cols, CV_8UC1);

        gray.copyTo(copyImg);

        //直方图均衡
        equalizeHist(copyImg, copyImg);

        rects.clear();
   //级联分类器检测
        cascade.detectMultiScale(copyImg, rects, 1.3,  4, 0, Size(30,30), Size(200, 200));
    }
} 

2个回答

您发的就是我说的官方样例,就是这个和我现在要搞明白的这个版本有些出入,后面的检测参数部分是没啥问题的,主要是前面那块对比官方版本不太明白,

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
级联分类器的具体训练过程

级联分类器的识别过程是十分清楚地,一级一级的。 但是训练过程是如何做的呢? 如何确定每一级的阈值? 如何保证后面的分类器比前面的分类器效果好?

opencv下的人脸检测总是无法加载级联分类器文件

代码本身没有错,debug下无法加载级联分类器文件,release下读不到图片,配置应该没有问题 求问,谢谢! #include "opencv2/core/core.hpp" #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #include <stdio.h> using namespace std; using namespace cv; string face_cascade_name = "E:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml"; //string face_cascade_name = "haarcascade_frontalface_alt.xml"; CascadeClassifier face_cascade; string window_name = "人脸识别"; void detectAndDisplay( Mat frame ); int main( int argc, char** argv ){ Mat image; //image = imread( argv[1]); image=imread("F:\\01.jpg"); if( !image.data ){ printf("[error] 没有图片\n"); return -1; } imshow("face",image); cout<<image.rows<<","<<image.cols<<endl; if( !face_cascade.load( face_cascade_name ) ){ printf("[error] 无法加载级联分类器文件!\n"); return -1; } detectAndDisplay(image); waitKey(0); } void detectAndDisplay( Mat frame ){ std::vector<Rect> faces; Mat frame_gray; cvtColor( frame, frame_gray, CV_BGR2GRAY ); equalizeHist( frame_gray, frame_gray ); face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) ); cout<<faces.size()<<endl; for( int i = 0; i < faces.size(); i++ ){ Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 ); ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 ); } imshow( window_name, frame ); }

opencv级联分类器训练样本

是不是就几十的样本不能训练?我有16个正样本25个无关付样本,然后运行train.bat的时候总是有中断,求大神看看什么问题![图片](https://img-ask.csdn.net/upload/201706/27/1498574716_948801.jpg)![图片](https://img-ask.csdn.net/upload/201706/27/1498574396_513921.jpg)![图片](https://img-ask.csdn.net/upload/201706/27/1498574401_514001.jpg)

opencv 级联分类器训练报错问题

如下,请问各位老师应该要怎么解决? ![图片说明](https://img-ask.csdn.net/upload/201811/12/1542029356_262265.png)

使用分类器来进行测试时运行代码打印出下面这条信息是什么意思?

![图片说明](https://img-ask.csdn.net/upload/201810/10/1539159402_831955.jpg) 如图所示,怎么解决?用自己训练的分类器或是自带的都出现这问题。。。。 以下是代码,,应该没啥问题。。 ``` #include "pch.h" #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; string face_cascade_name = "cascade.xml"; CascadeClassifier face_cascade; void detectAndDisplay(Mat frame); int main() { Mat image; image = imread("pic.jpg",1); if (!face_cascade.load(face_cascade_name)) { cout << "级联分类器错误,可能未找到文件,拷贝该文件到工程目录下!\n"; return -1; } detectAndDisplay(image);//调用人脸检测函数 waitKey(0); return 0; } void detectAndDisplay(Mat face) { vector<Rect> faces; Mat face_gray; cvtColor(face, face_gray, CV_BGR2GRAY);//rgb类型 转换为灰度类型 equalizeHist(face_gray, face_gray); face_cascade.detectMultiScale(face_gray, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(1, 1)); for (int i = 0; i < faces.size(); i++) { Point center(faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5); ellipse(face, center, Size(faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar (255, 0, 0), 2, 7, 0); } imshow("人脸识别", face); } ```

element ui Cascader级联选择器动态加载

我想问下element ui 的Cascader级联选择器,省市区数据每一级都是要通过父级id动态请求获取,这种方式如何实现

element-ui 从后台获取数据的动态加载级联选择器cascader,怎么清空叶子里面的内容?

从后台获取数据的动态加载级联选择器,设置一个select选择器,选择内容的时候,怎么清空cascader叶子里面的内容并且重新赋值。现在可以v-model值已经清空,但是怎么对已经赋值的菜单进行清空。![图片说明](https://img-ask.csdn.net/upload/202006/19/1592527630_747952.png) 该方法已经试过, this.$refs里面没有cascader.clearValue()这个属性,如何主动触发clearable或者其他方法具体怎么做呢? ``` let obj = {} obj.stopPropagation = () => {} try{ this.$refs.cascader.clearValue(obj) }catch(err){ this.$refs.cascader.handleClear(obj) } ``` # **2020/6/19,15:20记,被这个问题困扰了一周,现已解决!如有需要参考我另一篇博客**

hibernate级联操作相关问题,求解答!!!

数据库中有客户表.和联系人表,关系是一对多,现在想通过级联操作删除,就是删除联系人的同时也删除客户,我们老师讲根据级联操作的要求,需要先区分主体,主体现在是联系人,所以应该在联系人上配置cascade,但是这样做就报错了,我又在客户上配置了cascade结果可以运行了,这是为什么呢?求指点

opencv利用haar特征检测人脸

opencv利用haar特征检测人脸的过程中遇到很多问题,所以想大牛们请教每个窗口的特征如何计算?按比例缩放的窗口特征数是一样的吗?

【小白求助】安卓opencv用分类器对人脸进行识别的一些问题

小白入门,最近在看opencv的人脸识别(分类) 然后按照网上的代码,学习了之后,自己写了一段,发现运行的时候会卡很久,甚至直接退出,并且越用越卡。 我想实现的是对一张图片进行读入,然后加载多个分类器对图片内容进行识别,从而达到分类的目的。 我那个问题困扰了我一天,想来求助大神 我加载人脸识别的模型没问题,但是同时加载两个模型,比如说人脸和上身,就会卡死。 代码分3个部分,分别是MainActivity.java , execDetect.java , Detector.java 以下是MainActivity.java ``` package com.RinGo.IMGfenlei; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import org.opencv.android.Utils; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.imgproc.Imgproc; import org.opencv.objdetect.CascadeClassifier; public class MainActivity extends AppCompatActivity { private Detector frontfaceDetector; private Detector smileDetector; private static String CAMERAIMAGENAME = "image.jpg"; private ImageButton imageButton; private ImageButton imageButton2; private TextView textView; private Bitmap bitmap; private Bitmap rectBitmap; private Bitmap resizeBitmap; private Toast toast; private Button addFile; private Button startDetect; private Button check; private execDetect toDetcet; private String show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.tv_face); // imageButton = (ImageButton) findViewById(R.id.iv_face); //imageButton.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL); // imageButton2 = (ImageButton) findViewById(R.id.iv_face2); // imageButton2.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL); toDetcet=new execDetect(); addFile=(Button)findViewById(R.id.addPic); startDetect=(Button)findViewById(R.id.startDetect); check=(Button)findViewById(R.id.check); startDetect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // startDetect.setClickable(false); textView.setText("正在检测"); // detect(); Thread d =new Thread(new Runnable() { @Override public void run() { toDetcet.initExecDetect(MainActivity.this,bitmap); // Toast.makeText(MainActivity.this, "initialize succeed", Toast.LENGTH_SHORT).show(); show= toDetcet.startDetect(); // Toast.makeText(MainActivity.this, " succeed", Toast.LENGTH_SHORT).show(); } }); d.run(); textView.setText(show); // startDetect.setClickable(true); } }); check.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // startDetect.setClickable(false); textView.setText(toDetcet.getReturntoMain()); // startDetect.setClickable(true); } }); addFile.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 添加照片 // 打开本地相册 Intent intent1 = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent1, 101); //startActivity(intent1); } }); String strLibraryName = "opencv_java3"; // 不需要添加前缀 libopencv_java3 { try { Log.e("loadLibrary", strLibraryName); System.loadLibrary(strLibraryName); //System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // couldn't find "libopencv_java320.so" } catch (UnsatisfiedLinkError e) { Log.e("loadLibrary", "Native code library failed to load.\n" + e); } catch (Exception e) { Log.e("loadLibrary", "Exception: " + e); } } // frontfaceDetector = new Detector(this, R.raw.haarcascade_frontalface_alt, 6, 0.2F, 0.2F, new Scalar(255, 0, 0, 255)); } /** * 点击添加照片事件 * * @param v */ public void onClick(View v) { int bt_id = v.getId(); switch (bt_id) { /* case R.id.takePhoto: // 拍照 // 打开本地相机 Intent intent2 = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); Uri imageUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), CAMERAIMAGENAME)); intent2.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent2, 102); break; */ case R.id.back: this.finish(); break; default: break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // 加判断 不选择照片或者不拍照时不闪退 //Log.e("data", String.valueOf(data)); //if (data == null) //return; bitmap = null; switch (requestCode) { // 选择图片库的图片 case 101: if (resultCode == RESULT_OK) { try { Uri uri = data.getData(); bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri); } catch (Exception e) { e.printStackTrace(); } } break; // 表示调用本地照相机拍照 case 102: if (resultCode == RESULT_OK) { //Bundle bundle = data.getExtras(); //bm = (Bitmap) bundle.get("data"); bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + "/" + CAMERAIMAGENAME); } break; default: break; } Log.e("bitmap", String.valueOf(bitmap)); if (bitmap == null) { toast = Toast.makeText(MainActivity.this, "未选择图像", Toast.LENGTH_SHORT); toast.show(); return; } // 识别图片 并画框 /* Thread detect=new Thread(new Runnable() { @Override public void run() { } }); detect.run(); */ // 将照片剪裁 bitmap将被释放重新赋值 //int ibWidth = imageButton.getWidth(); // int ibHeight = imageButton.getHeight(); //resizeBitmap = imageButton.resizeBitmap(bitmap, ibWidth, ibHeight); //imageButton.setBitmap(resizeBitmap); //imageButton2.setBitmap(rectBitmap); } private void detect() { MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { toDetcet.initExecDetect(MainActivity.this,bitmap); // Toast.makeText(MainActivity.this, "initialize succeed", Toast.LENGTH_SHORT).show(); String show= toDetcet.startDetect(); // Toast.makeText(MainActivity.this, " succeed", Toast.LENGTH_SHORT).show(); textView.setText(show); } }); //textView.setText(toDetcet.getReturntoMain()); } } ``` 以下是activity_main.xml ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tv_face" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:text="未检测到人脸" android:textColor="@color/colorAccent" app:layout_constraintBottom_toTopOf="@+id/ll1" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> <LinearLayout android:id="@+id/ll1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"> <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton android:id="@+id/addPic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:layout_weight="1" android:onClick="onClick" android:text=" 选择图片(CV) " android:textSize="16sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton android:id="@+id/startDetect" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:layout_weight="1" android:onClick="onClick" android:text=" 开始识别 " android:textSize="16sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton android:id="@+id/check" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:layout_weight="1" android:onClick="onClick" android:text=" 结果 " android:textSize="16sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton android:id="@+id/back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="0dp" android:layout_weight="1" android:onClick="onClick" android:text=" 返回 " android:textSize="16sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> </LinearLayout> </LinearLayout> ``` 以下是execDetect.java ``` package com.RinGo.IMGfenlei; import android.content.Context; import android.graphics.Bitmap; import android.util.Log; import org.opencv.android.Utils; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.imgproc.Imgproc; import org.opencv.objdetect.CascadeClassifier; import com.RinGo.IMGfenlei.R; import com.RinGo.IMGfenlei.Detector; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; public class execDetect { private Detector frontfaceDetector; private Detector smilefaceDetector; private Detector[] detectors=new Detector[10]; private Detector detector; private Bitmap bitmap; private Bitmap rectBitmap; private String returntoMain=""; private String[] detectorNames=new String[10]; private CascadeClassifier mFrontalFaceClassifier = null; //正脸 级联分类器 private CascadeClassifier mProfileFaceClassifier = null; //侧脸 级联分类器 private int smilefacenum=0; private Context mcontext; private int[] cascades=new int[10]; public void initExecDetect(Context _context,Bitmap _bitmap) { bitmap=_bitmap; mcontext=_context; cascades[0]=R.raw.haarcascade_frontalface_alt; detectors[0] = new Detector(_context,R.raw.haarcascade_frontalface_alt, 1, 0.2F, 0.2F, new Scalar(255, 0, 0, 255)); detectorNames[0]="正面人脸"; cascades[1]=R.raw.lbpcascade_frontalface; detectors[1] = new Detector(_context,R.raw.lbpcascade_frontalface, 1, 0.2F, 0.2F, new Scalar(255, 0, 0, 255)); detectorNames[1]="正面人脸2"; } public String startDetect() { // bitmapToMat Mat toMat = new Mat(); Utils.bitmapToMat(bitmap, toMat); // Mat copyMat = new Mat(); // toMat.copyTo(copyMat); // 复制 // togray Mat gray = new Mat(); MatOfRect mRect = new MatOfRect(); Imgproc.cvtColor(toMat, gray, Imgproc.COLOR_RGBA2GRAY); for (int id = 0; id < detectors.length; id++) { //detector = new Detector(mcontext,cascades[id], 3, 0.1F, 0.1F, new Scalar(255, 0, 0, 255)); try { int num = 0; mRect=new MatOfRect(); Rect[] object = detectors[id].detectObjectImage( gray, mRect); Log.e("objectLength", object.length + ""); num=object.length; /* for (Rect rect : object) { num++; } */ returntoMain =returntoMain+ String.format("检测到%1$d个" + detectorNames[id], num) + "\n"; } catch (Exception e) { e.printStackTrace(); } //textView.setText(String.format("检测到%1$d个人脸", facenum)); //Utils.matToBitmap(toMat, bitmap); } return returntoMain; } public String getReturntoMain() { return returntoMain; } } ``` 以下是Detector.java,定义了我的级联分类器的设置 ``` package com.RinGo.IMGfenlei; import android.content.Context; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.core.Size; import org.opencv.objdetect.CascadeClassifier; import org.opencv.objdetect.Objdetect; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; /** * Created by think-hxr on 17-10-12. */ public class Detector { private CascadeClassifier mCascadeClassifier; private int mMinNeighbors; private float mRelativeObjectWidth; private float mRelativeObjectHeight; private Scalar mRectColor; /** * 构造方法 * * @param context 上下文 * @param id 级联分类器ID * @param minNeighbors 连续几帧确认目标 * @param relativeObjectWidth 最小宽度屏占比 * @param relativeObjectHeight 最小高度屏占比 * @param rectColor 画笔颜色 */ public Detector(Context context, int id, int minNeighbors, float relativeObjectWidth, float relativeObjectHeight, Scalar rectColor) { context = context.getApplicationContext(); mCascadeClassifier = createDetector(context, id); mMinNeighbors = minNeighbors; mRelativeObjectWidth = relativeObjectWidth; mRelativeObjectHeight = relativeObjectHeight; mRectColor = rectColor; } /** * 创建检测器 * * @param context 上下文 * @param id 级联分类器ID * @return 检测器 */ private CascadeClassifier createDetector(Context context, int id) { CascadeClassifier javaDetector; InputStream is = null; FileOutputStream os = null; try { is = context.getResources().openRawResource(id); File cascadeDir = context.getDir("cascade", Context.MODE_PRIVATE); File cascadeFile = new File(cascadeDir, id + ".xml"); os = new FileOutputStream(cascadeFile); byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = is.read(buffer)) != -1) { os.write(buffer, 0, bytesRead); } javaDetector = new CascadeClassifier(cascadeFile.getAbsolutePath()); //javaDetector=new CascadeClassifier(); // javaDetector.load(cascadeFile.getAbsolutePath()); if (javaDetector.empty()) { javaDetector = null; } boolean delete = cascadeDir.delete(); return javaDetector; } catch (IOException e) { e.printStackTrace(); return null; } finally { try { if (null != is) { is.close(); } if (null != os) { os.close(); } } catch (IOException e) { e.printStackTrace(); } } } /** * 目标检测 视频 * * @param gray 灰度图像 * @param object 识别结果的容器 * @return 检测到的目标位置集合 */ public Rect[] detectObject(Mat gray, MatOfRect object) { // 使用Java人脸检测 mCascadeClassifier.detectMultiScale( gray, // 要检查的灰度图像 object, // 检测到的人脸 1.1, // 表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%; mMinNeighbors, // 默认是3 控制误检测,表示默认几次重叠检测到人脸,才认为人脸存在 Objdetect.CASCADE_SCALE_IMAGE, getSize(gray, mRelativeObjectWidth, mRelativeObjectHeight), // 目标最小可能的大小 gray.size()); // 目标最大可能的大小 return object.toArray(); } /** * 目标检测 图片 * * @param gray 灰度图像 * @param object 识别结果的容器 * @return */ public Rect[] detectObjectImage(Mat gray, MatOfRect object) { mCascadeClassifier.detectMultiScale(gray,object); return object.toArray(); } /** * 根据屏占比获取大小 * * @param gray gray * @param relativeObjectWidth 最小宽度屏占比 * @param relativeObjectHeight 最小高度屏占比 * @return 大小 */ private Size getSize(Mat gray, float relativeObjectWidth, float relativeObjectHeight) { Size size = gray.size(); int cameraWidth = gray.cols(); int cameraHeight = gray.rows(); int width = Math.round(cameraWidth * relativeObjectWidth); int height = Math.round(cameraHeight * relativeObjectHeight); size.width = 0 >= width ? 0 : (cameraWidth < width ? cameraWidth : width); // width [0, cameraWidth] size.height = 0 >= height ? 0 : (cameraHeight < height ? cameraHeight : height); // height [0, cameraHeight] return size; } /** * 获取画笔颜色 * * @return 颜色 */ public Scalar getRectColor() { return mRectColor; } } ```

关于tomcat级联 有没有熟悉这方面的大神

大家有熟悉tomcat apache级联技术的 做全国的级联需要的技术条件

级联表的查询与显示!hql

在用户表显示用户级别表的级别 用hql怎么查询并且显示啊QQ453490982

关于java web级联问题

设置级联关系时,为什么是多的一方设置级联查询;而不是一的一方? 即:cascade = CascadeType.ALL在多的一方而不是一的一方。设置在一的一方会有什么问题?

关于hibernate级联删除,需要多条sql语句的问题

<p>数据库模式:</p> <pre name="code" class="sql">Board(board_id) Article(article_id,board_id) Comment(comment_id, article_id)</pre> <p> <br><br>设置级联删除,也就是删除Board时,会自动级联删除和Board关联的所有Article,以及和所有被删Article关联的所有Comment。</p> <p> </p> <p>配置映射文件后,效果达到了,全部都级联删除了,但是生成的SQL语句非常怪异。<br><br>按预想来说,每部分的级联删除应该使用外键直接删除,如:</p> <pre name="code" class="sql">delete from article where board_id = ? delete from comment where article_id = ?</pre> <p> <br><br>可是hibernate却使用主键删除,从而产生了非常多得sql语句,如:</p> <pre name="code" class="sql">delete from comment where comment_id = ? ... ... ... delete from article where article_id = ? delete from comment where comment_id = ? ... ... ... delete from article where article_id = ? ............ delete from board where board_id = ? </pre> <p> <br>是配置的问题吗?还是hibernate就是这样操作的呢?、</p> <p>如果是这样的话,删除关联众多的对象的话不是需要非常多得SQL语句,不是很影响性能么?</p> <p>如何才能简化hibernate产生的sql语句呢?最好是通过配置hibernate实现。</p> <p>如果这就是Hibernate的特性的话,那为什么要这么做呢?</p>

关于hibernate级联添加记录的问题

现在有两个表,一个user表,一个userRole表。 userRole的一个属性列外键关联user的主键 现在在添加用户的时候,同时需要将用户的权限也保存进数据库 但是用户是新用户,所以在更新userRole的时候,又需要关联这个 还没有添加进数据库的用户。所有一直添加不了用户 这个问题该怎么来解决呀,要用hibernate的级联添加来实现 [b]问题补充:[/b] 能不能让hibernate自己来实现,只用一句saveOrUpdate(user),而不写在两个事物处理之中呢? [b]问题补充:[/b] user表(userid,username,userpassword) userRole表(userRoleid,userid,roleid) role表(roleid,rolename) [b]user.hbm.xml[/b] <id name="userid" type="java.lang.String"> <column name="USERID" length="32" /> <generator class="uuid.hex" /> </id> <property name="username" type="java.lang.String"> <column name="USERNAME" length="30" not-null="true" /> </property> <property name="userpassword" type="java.lang.String"> <column name="USERPASSWORD" length="100" not-null="true" /> </property> <set name="userRoles" inverse="true" lazy="false" cascade="all"> <key> <column name="USERID" length="32" not-null="true" /> </key> <one-to-many class="com.SysUserRole" /> </set> [b]userRole.hbm.xml[/b] <id name="userroleid" type="java.lang.String"> <column name="USERROLEID" length="32" /> <generator class="uuid.hex" /> </id> <property name="userid" type="java.lang.String"> <column name="USERID" length="32" not-null="true" /> </property> <many-to-one name="user" class="com.User" fetch="select" insert="false" update="false"> <column name="USERID" length="32" not-null="true" /> </many-to-one> <property name="roleid" type="java.lang.String"> <column name="ROLEID" length="32" not-null="true" /> </property> [b]问题补充:[/b] 改过,改了之后出现这个 Repeated column in mapping for entity: com.UserRole column: USERID (should be mapped with insert="false" update="false")

hibernate级联查询中,如何对级联的结果进行分页

两个类:主题topic,回复post 现在要查看主题时同时列出所有的回复内容, 用hibernate级联查询:从topic级联查询出post,请问如何对post分页? 目前我是先查topic,然后单独查post进行分页,没有使用级联查询。

求四选一数据选择器级联成八选一数据选择器verilog代码,急求!!!!!!!

求四选一数据选择器级联成八选一数据选择器verilog代码,急求!!!!!!! 求四位比较器级联成八位比较器verilog代码,急求!!!!!!!

关于hibernate多表级联查询的问题

有一个问题,有4个表和对应的类A,B,C,D,A和B分别与C级联,C和D级联,但是A需要获取D中信息,但是B不需要,怎么在B里设置不查询D?怎么注解?

hibernate 3张表,都是双向一对多,怎么级联删除??

三张表,一张grade,一张stu,一张score,配的都是双向一对多,怎么删除delete(grade),对应删除stu,score对应的内容???????????? hibernate 最多只能两张表级联双向一对多吗??? 现在能够级联增加,就是不能删除!!只有一句SQL语句,只删除了grade!!!!!!!!没有其他提示!!!配置都是正确的!!!

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

立方体线框模型透视投影 (计算机图形学实验)

计算机图形学实验 立方体线框模型透视投影 的可执行文件,亲测可运行,若需报告可以联系我,期待和各位交流

2019 AI开发者大会

2019 AI开发者大会

组成原理课程设计(实现机器数的真值还原等功能)

实现机器数的真值还原(定点小数)、定点小数的单符号位补码加减运算、定点小数的补码乘法运算和浮点数的加减运算。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

软件测试2小时入门

软件测试2小时入门

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

计算机图形学-球的光照模型课程设计

计算机图形学-球的光照模型,有代码完美运行,有课程设计书

Linux常用命令大全(非常全!!!)

Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错。我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短小但却功能强大。我将我了解到的命令列举一下,仅供大家参考: 系统信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 d...

因为看了这些书,我大二就拿了华为Offer

四年了,四年,你知道大学这四年我怎么过的么?

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

fakeLocation13.5.1.zip

fakeLocation13.5.1 虚拟定位 ios13.5.1的最新驱动下载,iPhone/iPad免越狱虚拟定位工具Location-cleaned驱动已更新

UnityLicence

UnityLicence

Python可以这样学(第一季:Python内功修炼)

Python可以这样学(第一季:Python内功修炼)

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

土豆浏览器

土豆浏览器可以用来看各种搞笑、电影、电视剧视频

【数据结构与算法综合实验】欢乐连连看(C++ & MFC)案例

这是武汉理工大学计算机学院数据结构与算法综合实验课程的第三次项目:欢乐连连看(C++ & MFC)迭代开发代码。运行环境:VS2017。已经实现功能:开始游戏、消子、判断胜负、提示、重排、计时、帮助。

php+mysql学生成绩管理系统

学生成绩管理系统,分三个模块:学生,教师和管理员。 管理员模块:负责学生、老师信息的增删改;发布课程信息的增删改,以便让学生选课;审核老师提交的学生成绩并且打印成绩存档;按照课号查询每个课号的学生成绩

多功能数字钟.zip

利用数字电子计数知识设计并制作的数字电子钟(含multisim仿真),该数字钟具有显示星期、24小时制时间、闹铃、整点报时、时间校准功能

推荐24个国外黄色网站欣赏

在中国清朝,明黄色的衣服只有皇子才有资格穿,慢慢的黄色在中国就成了高贵的颜色。在人们的色彩印象中,黄色也表现为暂停。所以当你的网页设计采用黄色的时候,会让人们在你的网页前停留。 黄色,就像橙色和红色,黄色也是一个暖色。它有大自然、阳光、春天的涵义,而且通常被认为是一个快乐和有希望的色彩。黄色是所有色相中最能发光的颜色,给人轻快,透明,辉煌,充满希望的色彩印象。 黄色是一个高可见的色...

u-boot-2015.07.tar.bz2

uboot-2015-07最新代码,喜欢的朋友请拿去

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

学生成绩管理系统(PHP + MYSQL)

做的是数据库课程设计,使用的php + MySQL,本来是黄金搭配也就没啥说的,推荐使用wamp服务器,里面有详细的使用说明,带有界面的啊!呵呵 不行的话,可以给我留言!

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

C++语言基础视频教程

C++语言基础视频教程

玩转Python-Python3基础入门

玩转Python-Python3基础入门

相关热词 c# 不能序列化继承类 c# char* 调用 c# 开发dll模板 c#添加控件到工具箱 c#控制台组合数 编程计算猴子吃桃问题c# c# wpf 背景透明 随机抽取号码软件c# c# 开发环境 c# 属性和字段
立即提问