精华内容
下载资源
问答
  • jpa多对多+中间表查询,删除,添加 实体类数据库如下: 表单类 资产类 中间表:为双主键模式,head_id为表单

    jpa多对多+中间表的查询,删除,添加操作

    实体类数据库如下:

    表单类
    在这里插入图片描述

    资产类
    在这里插入图片描述

    中间表:为双主键模式,head_id为表单
    在这里插入图片描述

    实体类(维护方)如下:

    @Entity
    @Table(name="t_amc_asset_head")
    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
    public class AssetHead extends BaseEntity {
    
        private static final long serialVersionUID = 1L;
    
        @Temporal(TemporalType.DATE)
        @DateTimeFormat( pattern = "yyyy-MM-dd")
        @Column(name = "head_time")
        Date headTime;//领用时间
    
        @ManyToOne
        @JoinColumn(name = "user_id")
        private UserInCompany userInCompany;//关联  ?
    
        @Column(name = "user_name")
        String UserName;//领用人
    
    
        @Column(name = "head_position")
        String headPosition;//领用位置
    
        @Column(name = "head_ps")
        String headPS;//领用备注
    
    
        @Column(name = "head_status")
        String headStatus;//领用状态   0:new   1 :锁定
    
        @Column(name = "label_id")
        String labelId;//资产编号
    
        @Column(name = "asset_name")
        String assetName;//资产名称
    
    
    //多对多
        @ManyToMany(fetch=FetchType.EAGER)
        @JoinTable(name = "middle_asset_head", joinColumns = { @JoinColumn(name = "head_id") }, inverseJoinColumns = { @JoinColumn(name = "label_id") })
        /* 加载策略定义 */
        @Fetch(FetchMode.SUBSELECT)
        /* 缓存策略 */
        @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
        private List<Asset> assetList;
    
    

    collection 增删查如下:

    新增

    
        /**
         * 新建需要在状态未使用的资产才可以执行操作
         *
         * @param assethead
         *
         * @return
         */
        @RequestMapping(value = "save", method = RequestMethod.POST)
        @ResponseBody
        public AjaxMessage save(@RequestParam("assethead")String assethead,@RequestParam("ids[]")String ids[]) throws ParseException {
    
       
              //添加领用单
              String bb=assetHead.get("headTime").toString();
               SimpleDateFormat  sdf = new SimpleDateFormat("yyyy-MM-dd");
               Date date = sdf.parse(bb);
    
              AssetHead assetHead1=new AssetHead();
              assetHead1.setUserInCompany(userInCompanyService.findOne((String)assetHead.get("userInCompany.tid")));
              assetHead1.setUserName((String)assetHead.get("userName"));
              assetHead1.setHeadPS((String)assetHead.get("headPS"));
              assetHead1.setHeadPosition((String)assetHead.get("headPosition"));
              assetHead1.setHeadTime(date);
              assetHead1.setHeadStatus("0");
              assetHeadService.save(assetHead1);//添加到领用单
    
    
    
            List<Asset> assetList=new ArrayList<Asset>();
            for (int i = 0;i < ids.length; i++) {//
    
                Asset asset=new Asset();
                asset=assetService.findOne(splits[i]);
                asset.setUseStatus("locking");
                assetService.save(asset);
                assetList.add(asset);
    
    
            }
    
            AssetHead Assethead= assetHeadService.findOne(assetHead1.getTid());//多对多中间表,先获取维护方的对象
            if(Assethead!=null) {//判断对象是否为空
                if(Assethead.getAssetList()==null){
                    Assethead.setAssetList(Lists.newArrayList());
                }
                Assethead.getAssetList().addAll(assetList);//对象不为空,向中间表添加全部记录
            }
           assetHeadService.save(Assethead);//保存中间表操作
    
    
            return AjaxMessage.createSuccessMsg();
        }
    
    /**
         * 删除
         *
         * @param id
         * @return
         */
        //@PreAuthorize("hasRole('ROLE_AssetsourceListDelete')")
        @RequestMapping(value = "delete/{id}", method = RequestMethod.POST)
        @ResponseBody
        public AjaxMessage delete(@PathVariable("id") String id) {
            //解放资产
           AssetHead assetHead=assetHeadService.findOne(id);
            List<Asset> assetList=new ArrayList<Asset>();
            if(assetHead!=null) {
                if(assetHead.getAssetList()==null){
                    assetHead.setAssetList(Lists.newArrayList());
                }
                assetList=assetHead.getAssetList();
            }
            for (Asset asset:assetList) {//对中间表资源全部释放
                asset.setUseStatus("unused");
                System.out.println("!!!!!!!!!!!!!!!!!!!!!对中间表资源全部释放!!!!!!!!!!!!!"+asset);
                assetService.save(asset);
            }
    
    //删除中间表
            assetHead.getAssetList().removeAll(assetHead.getAssetList());
           assetHeadService.save(assetHead);
    
            assetHeadService.deleteByLogic(id);//删除领用单
            return AjaxMessage.createSuccessMsg();
        }
    
    
    
    /**
         * 跳转修改页
         * @param id
         * @param model
         * @return
         */
        @RequestMapping(value = "use/{id}")//领用修改
        public String edit(@PathVariable("id") String id,Model model) {
            model.addAttribute("assethead", assetHeadService.findOne(id));//查询领用单
         AssetHead assetHead= assetHeadService.findOne(id);
    
            List<Asset> assetList=new ArrayList<Asset>();
            if(assetHead!=null) {
                if(assetHead.getAssetList()==null){
                    assetHead.setAssetList(Lists.newArrayList());//通过中间表,查询领用单对应的所有资源单
                }
                assetList=assetHead.getAssetList();
            }
    
            model.addAttribute("assetList",assetList);
            return "amc/assethead/edit";
        }
    

    最后:修改就是将删除和添加结合起来

    展开全文
  • mySql查询中间表(mySql query intermediate table)我试图找出两个用户之间是否存在对话,但我无法想象如何在mysql中查询。我的表是:users-----idnameconversations-------------idconversation_user---------------...

    mySql查询中间表(mySql query intermediate table)

    我试图找出两个用户之间是否存在对话,但我无法想象如何在mysql中查询。

    我的表是:

    users

    -----

    id

    name

    conversations

    -------------

    id

    conversation_user

    -----------------

    user_id

    conversation_id

    例如,我有两个用户和一个对话,所以在我的conversation_user表中

    user_id conversation_id

    1 1

    2 1

    如何检查这种关系是否存在?

    先谢谢你。

    i try to find out if a conversation between two users exist but i can't imagine how to query this in mysql.

    My tables are:

    users

    -----

    id

    name

    conversations

    -------------

    id

    conversation_user

    -----------------

    user_id

    conversation_id

    For example, i have two users and one conversation so in my conversation_user table i have

    user_id conversation_id

    1 1

    2 1

    How to check if this relationship exist or not?

    thank you in advance.

    原文:https://stackoverflow.com/questions/38513710

    更新时间:2019-12-23 11:40

    最满意答案

    你可以使用join:

    SELECT

    c1.*, c2.*

    FROM

    conversation_user c1

    INNER JOIN

    conversation_user c2

    ON

    c1.conversation_id = c2.conversation_id

    WHERE

    c1.user_id != c2.user_id;

    您可以看一下这个更详细的SQLFiddle示例 。 它显示了一个带来用户名称的示例和一个按对话过滤的示例。

    You can use join for that:

    SELECT

    c1.*, c2.*

    FROM

    conversation_user c1

    INNER JOIN

    conversation_user c2

    ON

    c1.conversation_id = c2.conversation_id

    WHERE

    c1.user_id != c2.user_id;

    You can take a look at this SQLFiddle Example that is a bit more detailed. It shows an example of bringing the name of the users and one that filters by conversation.

    2016-07-21

    相关问答

    问题中的SQL查询似乎有效,您只需添加其余的表和条件即可获得所需的数据。 用户填写表单并希望搜索所有成员(成员表)zipcode = 11111或zipcode = 22222(个人资料表)承诺= ANY,practice = ANY,gigs = 1,availability = ANY(技能表)lead_vocals = 1和lead_guitar = 1(流派表)alternative = 1,modern_rock = 1,heavy_metal = 1 您已经将一半查询放在请求中,除非它

    ...

    您可以对UNION ALL使用条件聚合 : SELECT t1.acc_no, t1.name,

    SUM(CASE WHEN t2.`date` = '2016-06-01' THEN amount END) AS '2016-06-01',

    SUM(CASE WHEN t2.`date` = '2016-06-02' THEN amount END) AS '2016-06-02',

    SUM(CASE WHEN t2.`date` = '2016-06-

    ...

    你得到$row[field_name] , 如果你有两个同名但来自不同表的字段,你必须至少添加一个table.field AS somthing_else SELECT t1.id,t2.id AS 't2_id' ....

    ...

    ...

    var_dump($row);

    会给$row['id'],$row['t2_id'] 如果你不使用AS你将只获得$row['id'] (一个值丢失)。 You get it as $row[field_name], And if you have two f

    ...

    你可以使用join: SELECT

    c1.*, c2.*

    FROM

    conversation_user c1

    INNER JOIN

    conversation_user c2

    ON

    c1.conversation_id = c2.conversation_id

    WHERE

    c1.user_id != c2.user_id;

    您可以看一下这个更详细的SQLFiddle示例 。 它显示了一个带来用户名称的示例和一个按对话过滤的示例。 You can use jo

    ...

    这不是我做过的最好的查询,但我得到了你想要的结果: wwtest1 = table-1,wwtest2 =表2。 SELECT w1.cid AS cid, (SELECT SUM(total) FROM wwtest WHERE cid = 23) AS total, ((SELECT SUM(advance) FROM wwtest WHERE cid = 23) + (SELECT SUM(advance) FROM wwtest2)) AS advance, ((SELECT SUM(to

    ...

    我了解https://cloud.google.com/bigquery/docs/reference/v2/tabledata/list willl可让您在不执行查询的情况下读取表格块(产生数据处理费用)。 这使您可以并行读取查询结果,并将所有查询写入临时表ID,您可以将其传递给此函数并提供不同的范围(使用startIndex,maxResults)。 I understand that https://cloud.google.com/bigquery/docs/reference/v2/ta

    ...

    User_Exercise不需要单独的模型 您可以使用$this->belongsToMany从基本模型即User Note : 对于插入过程,您可以通过获取父ID $insertUser = User::create($userData); 然后 $insertUser->id用于获取最后一个插入ID 然后要检索User_Exercise您应该使用User模型中的$this->belongsToMany 例 在你的User模型中有这个 public function getUser() {

    re

    ...

    事情在这里:

    作为提交的图像类型不会处理POST指令。 您需要使用实际的提交类型输入。

    或者作为使用提交类型的按钮: DELETE

    这就是为什么你的代码不会“触发”条

    ...

    select

    *

    from

    your_table

    where Position = 2

    and Rec_ID in (select Rec_ID from your_table where Sbj_ID = 9)

    select

    *

    from

    your_table

    where Position = 2

    and Rec_ID in (select Rec_ID from your_table where Sbj_ID = 9)

    展开全文
  • mysql(三)多表查询

    2021-01-18 22:11:17
    Mysql 之间的三种关系之间一般存在三种关系,即一对一,一对多,多对多关系。article_cate 文章分类有id,title,state, 字段article 文章有id,title,description,cate_id,state 字段一个分类对应 多...

    Mysql 表与表之间的三种关系

    表与表之间一般存在三种关系,即一对一,一对多,多对多关系。

    article_cate 文章分类表

    有id,title,state, 字段

    article 文章表

    有id,title,description,cate_id,state 字段

    一个分类对应 多个文章

    一条文章只对应 一个分类

    article_cate 表中的ID 关联了 article表中的 cate_id 字段

    一对一

    查询 所有文章 及其 分类ID

    笛卡尔积连接

    select article.id as id,article.title as title,article_cate.title as cate

    from article,article_cate

    Where article.cate_id=article_cate.id;

    内连接

    select article.id as id,article.title as title,article_cate.title as cate

    from article

    INNER JOIN article_cate ON article_cate.id=article.cate_id;

    一对多

    返回 分类ID 为 2 的数据

    select * from article where cate_id=2

    多对多

    多对多的关系需要借助中间表来关联

    三个表 课程表,中间表,学生表 lesson, lesson_student, student

    表结构字段如下:

    lesson[id,name],

    lesson_student[lesson_id,student_id],

    student[id,number,password,classId,name]

    1、查询张三选修了那些课程

    张三的 Id 为 1

    普通查询:

    SELECT * FROM lesson where id in (select lesson_id from lesson_student WHERE student_id=1);

    笛卡尔积关联查询:

    SELECT * FROM lesson,lesson_student where lesson.id=lesson_student.lesson_id AND lesson_student.student_id=1;

    INNER JOIN(内连接查询):

    SELECT * FROM lesson INNER JOIN lesson_student ON lesson.id=lesson_student.lesson_id AND lesson_student.student_id=1;

    2、查询 Java 程序设计被那些学生选修了

    Java 程序设计的 id 为 2

    普通查询:

    SELECT * FROM student where id in (select student_id from lesson_student WHERE lesson_id=2);

    笛卡尔积关联查询:

    SELECT * FROM student,lesson_student

    where student.id=lesson_student.student_id AND lesson_student.lesson_id=2;

    内连接:

    SELECT * FROM student INNER JOIN lesson_student ON student.id=lesson_student.student_id AND lesson_student.lesson_id=2;

    左外连接:LEFT JOIN ON

    右外连接:RIGHT JOIN ON

    左右连接 没有匹配上的数据不会返回

    展开全文
  • mybatis多表多对查询

    2021-03-14 18:23:32
    建立两张表:用户表,角色表让用户表和角色表具有多对多的关系。需要使用中间表中间表中包含各自的主键,在中间表中是外键。1 当我们查询所有角色时,可以同时得到角色的所赋予的用户信息一个Role可以赋予给多个...

    建立两张表:用户表,角色表

    让用户表和角色表具有多对多的关系。需要使用中间表,中间表中包含各自的主键,在中间表中是外键。

    6xt0st7kr.jpg

    1 当我们查询所有角色时,可以同时得到角色的所赋予的用户信息

    一个Role可以赋予给多个User,因此在Role的实体类中包含User的集合引用:public class Role implements Serializable {

    private Integer roleId;

    private String roleName;

    private String roleDesc;

    //多对多的关系映射:一个角色可以赋予多个用户private List users;}

    然后我们需要在IRoleDao.xml中定义封装role和user的一对多的resultMap:

    然后写查询语句:role先左关联user_role,再左关联user

    select r.id as rid,r.role_name,r.role_desc,u.* from role r

    left outer join user_role ur  on r.id = ur.rid

    left outer join user u on U.ID = ur.uid

    在测试类中测试:/** * 测试查询所有 */@Testpublic void testFindAll(){

    List roles = roleDao.findAll();

    for(Role role : roles){

    System.out.println("---每个角色的信息----");

    System.out.println(role);

    System.out.println(role.getUsers());

    }}

    z306tpatm.jpg

    2 当我们查询所有用户时,可以同时得到用户所包含的角色信息

    一个User可以有多个Role,因此在User的实体类中包含Role的集合引用:public class User implements Serializable {

    private Integer userId;

    private String userName;

    private String userAddress;

    private String userSex;

    private Date userBirthday;

    //一对多关系映射:主表实体应该包含从表实体的集合引用private List accounts;

    //多对多的关系映射:一个用户可以具备多个角色private List roles;}

    然后我们需要在IUserDao.xml中定义封装user和role的一对多的resultMap:

    然后写查询语句:user先左关联user_role,再左关联role

    展开全文
  • mysql多表连接查询

    2021-01-18 22:11:14
    新建两张1:student 截图如下:2:course 截图如下:(此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个会有自己不同的主键。)一、外连接外连接可分为:左连接、右...
  • 文章目录注意多对多关系表创建(同时添加中间表page_tag)删除(只删除中间表page_tag中的数据)或者这样删除(只删除中间表page_tag中的数据)添加(只添加中间表page_tag中的数据) 注意 多对多关系中,使用...
  • mySql查询中间表

    2021-01-19 02:27:41
    "btn2":"数据库紧急救援服务","tip":"还有更专家帮助您解决云上业务问题:立即查看","btn1":"云上数据库优化服务","link2":"https://www.aliyun.com/service/databaserescue","title":"数据库专家服务"}],"search...
  • 用户表User: id name phone组表Group:id groupName关联表(中间表):用户组User_Group id userId groupId查询某个组里的所有用户SELECT u.name, u.phoneFROM User uWHERE EXISTS(SELECT 1FROM User_Group u_gINNER ...
  • // 只有给出数组的 ID 会被保留在中间表中 //$res = $category->articles()->attach($art_ids); // 新增,哪怕已经存在数据,还会继续插入 //$res = $category->articles()->toggle($art_ids); // 反选操作最佳操作...
  • Sequelize多表联合查询案例

    千次阅读 2021-05-12 11:12:06
    查询Match中的user_id,report_comment,以及job_history_id所关联的JOB中的job_link,在前端显示。 三、Code: 1. 后端 首先要建立两个的关联: MatchScoreReportModel.belongsTo(JobHistoryModel, { foreign...
  • 文章目录1 摘要2 情景复现2.1 数据模型2.2 核心代码2.3 测试数据2.4 拓展一点1 摘要分页查询是后台项目中最常见的一种操作,在一对多(one to many)的关系中,如何根据主进行分页是一个较为棘手的问题,尤其是...
  • 为什么会有这么多中间表

    千次阅读 2021-03-03 19:41:43
    为什么中间表会越来越中间表会给项目组带来什么样的困扰,如何解决这些困扰?这里我们就尝试探讨一下这个问题。中间表出现的典型场景主要有三个:一步算不出来。数据库中的原始数据表要经过复杂计算,才能在报表...
  • 关系如下 User和Role除了本身的表字段,还要有一个集合承接关联集合 @TableName("pe_user") @Data public class User { @TableId private String id; private String username; private String ...
  • mysql 多表查询练习

    2021-03-14 15:06:29
    多对多关系建立多对多关系的时候 实际上就是建立外键明确: 1. 在哪张表建立外键(中间表) 2. 两表字段之间建立联系建立三张表老师 tid tname学生 sid sname中间表 tid sidcreate table teacher (tid int primary key,...
  • mybatis多表查询多对多关系查询的实现-xml方式
  • 数据库表的关系无非就四种:1、一对多(多对一),2、一对一,3、多对多,4、没有关系...功能:通过中间表查询出与之关联的表的个别字段数据 传统方法(注解编写sql语句的方式) 表关系(歌单表、歌曲表、歌曲集合表
  • 我们在用hibernate时,会在对应的实体加上对应一对多,多对多,多对一关系。...多对多,有相关中间表一开始我本打算用SQL,但是直接用SQL去查询,就无法直接获取两个表中的关联数据!就算能获取,相对来说还是比较复杂....
  • 一、多对多1、如何确定多对多关系​例如 老师表 和 学生表​套路一样...那么 两者是多对多关系2、处理方式​建立一个中间表,用于存储关系,至少具备两个字段分别指向老师和学生的主键,两个字段都是外键 如下:create t...
  • 通常在这种情况下,使用中间表可以提高统计查询的效率。首先创建表 session,记录了客户每天的消费记录CREATE TABLE session (cust_id varchar(10) , --客户编号cust_amount DECIMAL(16,2), --客户消费金额cust_date ...
  • 这是我们应该去考虑的问题,为了解决这个问题,今天继续学习多表查询。一、笛卡尔积与内连接万万没有想到,学个数据库竟然还能接触到笛卡尔积?后面不会学着学着还会出现牛顿吧……牛顿、拉格朗日、泰勒、傅里叶……...
  • Mybatis的多关联查询多对多)

    千次阅读 多人点赞 2021-02-12 23:46:03
    Mybatis的多关联查询多对多)项目目录结构实现 Role 到 User 多对多业务要求用户与角色的关系模型编写角色实体类编写 Role 持久层接口实现的 SQL 语句编写映射文件测试代码实现 User 到 Role 的多对多业务要求...
  • +------+------+ | uid | lid | +------+------+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 1 | | 5 | 1 | | 1 | 2 | | 5 | 2 | | 1 | 3 | | 1 | 4 | 如何通过中间表记录,查询列出 suid , sname, lession 对应的数据呢...
  • 1.一对多查询:关键点在于collection标签 一对多查询是指在查询一方对象的时候,同时将其所关联的多方对象也都查询出来。 一个班级有个学生,一个学生只属于一个班级。 数据库student表里有个字段classno是外键,...
  • 通常在这种情况下,使用中间表可以提高统计查询的效率,下面通过session 表的统计来介绍中间表的使用:(1)session 表记录了客户每天的消费记录,表结构如下:CREATE TABLE session (cust_id varchar(10) , --客户...
  • SQL多表查询

    千次阅读 2021-11-23 00:20:53
    多表查询分类: 内连接查询 显式内连接 隐式内连接 外连接查询 左外连接 右外连接 子查询 自关联查询 准备数据: -- 新建user CREATE TABLE USER( id INT PRIMARY KEY AUTO_INCREMENT, -- 用户id NAME ...
  • 数据库怎么设计多对多的数据

    千次阅读 2021-01-19 19:55:55
    数据库怎么设计多对多的数据一、总结1、项目中小组和主题之间是多对多的2、可以将常用信息和不常用信息分成两个来优化数据库2、一对多的话:在多的里面建立一的字段,比如母亲(一)和孩子(多),在孩子里面添加...
  • 对于数据库教程大的表,在进行统计查询时通常会比较慢的,并且还要考虑查询是否会在线应用产生影响,通常这种情况下我们使用中间表可以提高查询统计速度,下面我们来统计counttable来统计客户每天消费的记录,如下...
  • 一,各个表格1、用户CREATE TABLE `t_user` (`id` varchar(40) NOT NULL,`username` varchar(20) NOT NULL,PRIMARY KEY (`id`))2、角色CREATE TABLE `t_role` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` ...
  • 不用纠结中间表,但是中间表中不能有除了外键列的其他数据,因为写了也没用,查询不到,把需要展示的字段都写在实体双方; 新增的集合属性需要设置get set 方法,要不然前台获取不到对方的值 在多对多的查询中,尽量不要...
  • 1.MyBatis多表查询之前的博客在MyBatis第三章节中介绍了多表查询多对一、一对多的情况,这里再对一对一、多堆多的情况做一下说明,也算是将MyBatis这部分的知识做一个补充和完整收尾的工作。1.1.一对一查询这里基于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 279,536
精华内容 111,814
关键字:

多对多查询中间表