hibernate 多对多查询出来的set想要进行排序,只知道有order-by和sort 但谁能说说具体用法!谢谢?

hibernate 多对多查询出来的set想要进行排序,只知道有order-by和sort 但谁能说说具体用法!谢谢?,第1张

你可以通过hsql来加入排序内容,或者直接通过java运行sql语句,oder by 对象的字段名,界面就是你需要的了。

对于数据库的ID字段,没必要向你这样,如果这样的思路的话,程序的冗余太大了,数据越多,速度越慢,如果有几百上千万条数据的话,你从程序插一条数据,时间长的吓人,不能这样设计的。

还有就是,你一条一条的set数据,数据太多会死人的,你为什么不考虑一下,用list或者page类来搞呢?

用hsql查到数据,sql中最后加入 oder by 表的排序字段,这样就行了。

然后放入list中,将整个list传值到你需要的地方,用el表达式获取list内的值,你会发现已经是你想要的东西了。

sort 没用过。

生活中的多对一关系:班主任,班级关系。一个班主任可以带很多班级,但是每个班级只能有一个班主任

以上创建了两条老师数据

由于我们设置外键关联可以为空null=True,所以此时在班级表创建时,可以直接保存,不需要提供老师数据

以上创建了两条老师数据

由于我们设置外键关联可以为空null=True,所以此时在班级表创建时,可以直接保存,不需要提供老师数据

将老师分配个班级之后,由于班级表关联了老师字段,我们可以通过班级找到对应老师,虽然老师表中没有关联班级字段,但是也可以通过老师找到他所带的班级,这种查询方式也叫作关联查询

通过模型类名称后追加一个_set,来实现反向查询

由于我们这是一个一对多的关系,也就说明我们的老师可以对应多个班级

我们可以继续给H1老师分配新的班级

一个班级只能对应一个老师,外键是唯一的,那么你在继续给C1班级分配一个新的老师时,会覆盖之前的老师信息,并不会保存一个新的老师

把这个班级的老师删除,由于设置了外键字段可以为null,此时班级的老师选项为null

注意:

1、要记得删除之后要重新获取一次数据,否则查看到的结果中还是之前获取到的有老师的班级数据

2、c1 = Class.objects.all().first()或是c1=Class.objects.filter(id=2).first(),都需要加 .first() ,否则会报错!!!

生活中,多对多关系:一个音乐家可以隶属于多个乐队,一个乐队可以有多个音乐家

创建音乐家以及乐队

创建出两个乐队之后对其进行音乐家的添加,多对多字段添加时,可以使用add函数进行多值增加,在ManyToManyField所在模型的记录使用add方法

B1乐队含有A1,A2两名成员,B2乐队含有A1成员

可以在音乐家表中查找某个音乐家属于哪些乐队

也可以查找这音乐家在哪个乐队

多对多关联字段的删除,要使用remove来进行关系的断开,而不是直接使用delete,remove只会断开数据之间的联系,但是不会将数据删除

在B1乐队中删除A1音乐家

创建一个多对一关系的父子表,一个父亲可能有多个儿子

创建父亲和儿子们

查询所有父亲名字是jack的孩子

查询所有儿子名开头为J的父亲

获取到某一个父亲的所有孩子,通过某一条数据的小写表名_set反向查询

创建一些数据

通过soldier_set我们就可以关联到对应的士兵表,并且对应返回结果可以执行我们常用的filter,exclude等查询 *** 作

也可以通过定义关联字段中的related_name值,来实现自定义的反向查询名字,注意:related_name的值必须唯一

接下来通过某条数据反向查询

注意:related_name一定是一个唯一的值,否则反向查找时会出现二异性错误,也可以将related_name初始化为+,来取消反向查询

ArrayList是有序的,多数的关系往往不需要体现先后关系。

数据库的一对多映射本意就是表现出从属关系而已,Set更准确。

更多时候查询要确认的是有和没有的问题,set有contains方法,list只能完全遍历对照了。

如果你要用List也可以的,但是要指定代表序列的属性,Set

List

Map都是可以用的,list用得最少


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11727780.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存