精华内容
下载资源
问答
  • 在使用mysql多表联合查询时怎样可以做到只返回返回一张的内容,本文将详细介绍,需要了解的朋友可以参考下
  • Spring Data JPA设置表联合主键

    千次阅读 2019-07-10 18:27:40
    遇到了一个新的问题,就是如何使用 Spring ...第一种方式是直接使用 @Id 这个注解,来设置联合主键,例如下面这样,我要在 stu_no 和 stu_name 上建立联合主键: @Entity @Table(name = "student") public class...

    遇到了一个新的问题,就是如何使用 Spring Data JPA 建立表的联合主键?网上找了很多答案,自己也踩了一些坑,总结出了三种方式,记录一下。

    1. 第一种方式:

    第一种方式是直接使用 @Id 这个注解,来设置联合主键,例如下面这样,我要在 stu_no 和 stu_name 上建立联合主键:

    @Entity
    @Table(name = "student")
    public class Student {
    
        @Id
        @Column(name = "stu_no", nullable = false, length = 11)
        private Integer stuNo;
    
        @Id
        @Column(name = "stu_name", nullable = false, length = 128)
        private String stuName;
    
        @Column(name = "stu_age", nullable = false, length = 3)
        private Integer stuAge;
    
        @Column(name = "class_id", nullable = false, length = 8)
        private String classId;
    }

    这种方式很简单,但是问题也是存在的。例如我想把 stu_no 设置为自动递增,加上 @GeneratedValue ,就是不生效,而是作用于 stu_name 这个字段上面,实在是很邪门!

    2. 第二种方式:

    使用 @IdClass 这个注解来实现,我们需要新建一个主键类,这个类需要实现 Serializable 接口,并且需要无惨构造函数,还需要重写 equals 和 hashCode 方法,具体内容如下:

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @EqualsAndHashCode
    public class StudentUPK implements Serializable {
    
        private Integer stuNo;
    
        private String stuName;
    
    }

    这里我是使用 lombok 插件来简化代码的,当然你可以自己手写构造函数和重写方法。然后实体类 Student 的内容如下:

    @Entity
    @IdClass(StudentUPK.class)
    @Table(name = "student")
    public class Student {
    
        @Id
        @Column(name = "stu_no", nullable = false, length = 11)
        private Integer stuNo;
    
        @Id
        @Column(name = "stu_name", nullable = false, length = 128)
        private String stuName;
    
        @Column(name = "stu_age", nullable = false, length = 3)
        private Integer stuAge;
    
        @Column(name = "class_id", nullable = false, length = 8)
        private String classId;
    }

    这种方式也是存在问题的,在使用 JpaRepository 的时候,这样写:public interface StudentRepository extends JpaRepository<Student, StudentUPK> ,ID 写成这主键类,本以为是可以的,但一执行 CRUD 老是会报错,到现在还没找到原因。

    3. 第三种方式:

    第三种方式是使用 @Embeddable 和 @EmbeddedId 注解来实现,同样是需要一个主键类,内容如下:

    @Builder
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Embeddable
    @EqualsAndHashCode
    public class StudentUPK implements Serializable {
    
        @Column(name = "stu_no", nullable = false, length = 11)
        private Integer stuNo;
    
        @Column(name = "stu_name", nullable = false, length = 128)
        private String stuName;
    }

    主键类也是需要实现 Serializable 接口,并且需要无惨构造函数,还需要重写 equals 和 hashCode 方法。实体类 Student 的内容如下:

    @Entity
    @Table(name = "student")
    public class Student {
    
        @EmbeddedId
        private StudentUPK studentUPK;
    
        @Column(name = "stu_age", nullable = false, length = 3)
        private Integer stuAge;
    
        @Column(name = "class_id", nullable = false, length = 8)
        private String classId;
    }

    这里使用了 @EmbeddedId 这个注解。这种方式使用 JpaRepository 是可以的,例如写成这样:`public interface StudentRepository extends JpaRepository<Student, StudentUPK> {
    }`

    然后再新建一个测试方法:

    @SpringBootTest
    @RunWith(SpringRunner.class)
    public class StudentRepositoryTest {
    
        @Resource
        private StudentRepository studentRepository;
    
        @Test
        public void testInsert(){
            StudentUPK upk = StudentUPK.builder().stuNo(132).stuName("Rose Duan").build();
            Student student = Student.builder().studentUPK(upk).stuAge(14).classId("12312323").build();
    
            studentRepository.save(student);
        }
    
    }

    CRUD 的操作应该就成功了!

    展开全文
  • 添加语法如下:“ALTER TABLE ...”【示例1】假设订房信息(Orderinfo),没有创建主键,现在需要将Orderinfo中的customerID和OrderID两列设置成主键。创建的语法如下:“ALTER TABLE ORDERINFOADD CONSTRAINT ...

    添加语法如下:

    “ALTER TABLE table_name

    ADD CONSTRAINT pk_table_name PRIMARY KEY(列名1,列名2);”

    【示例1】假设订房信息表(Orderinfo),没有创建主键,现在需要将Orderinfo表中的customerID和OrderID两列设置成主键。创建的语法如下:

    “ALTER TABLE ORDERINFO

    ADD CONSTRAINT pk_orderinfo PRIMARY KEY(customerID,OrderID);”

    *通常情况下,当在修改表时要设置表中某个列的主键约束时,要确保设置成主键约束的列中值不能够有重复的,并且要保证是非空的。否则,是无非设置主键约束的。

    删除主键约束

    删除主键约束的方法语句如下:

    “ALTER TABLE table_name

    DROP PRIMARY KEY”

    【示例2】删除客户信息表(customerinfo)中主键约束。代码如下:

    “ALTER TABLE CUSTOMERINFO

    DROP PRIMARY KEY”

    *由于主键约束在一个表中只能有一个,因此不需要指定主键名就可以删除一个表中的主键约束。

    原文:http://www.cnblogs.com/dflmg/p/5188954.html

    展开全文
  • 其实这个操作很简单,就是按住ctrl键,或者是shift键,然后右键你要设置主键的那个属性列,直接选择设置主键即可!
    其实这个操作很简单,就是按住ctrl键,或者是shift键,然后右键你要设置主键的那个属性列,直接选择设置主键即可!
    展开全文
  • 请问一下account list中的acc_id和acc_bankNum设置联合主键,怎么将该acc_bankNum和user list中的acc_bankNum设置为外键 ![用户](https://img-ask.csdn.net/upload/201903/06/1551872995_866154.png) !...
  • Spring boot如何设置联合主键

    千次阅读 2019-02-20 18:03:34
    Spring boot如何设置联合主键 前言 文章主要内容 如何设置主键并让其自增长 如何设置联合主键 前期准备 创建一个实体类 // An highlighted block @Entity public class Choice { //学生 id @Id ...

    Spring boot如何设置联合主键

    前言

    文章主要内容

    1. 如何设置主键并让其自增长
    2. 如何设置联合主键

    前期准备

    创建一个实体类

    // An highlighted block
    @Entity
    public class Choice {
    
        //学生 id
        @Id
        private String sId;
        private int qId;
        private Integer status;
        public Choice() {
            super();
        }
    
        public Choice(String sId, int qId, Integer status ) {
            this.sId = sId;
            this.qId = qId;
            this.status = status;
       
        }
    
        public String getsId() {
            return sId;
        }
    
        public void setsId(String sId) {
            this.sId = sId;
        }
    
        public int getqId() {
            return qId;
        }
    
        public void setqId(int qId) {
            this.qId = qId;
        }
    
        public Integer getStatus() {
            return status;
        }
    
        public void setStatus(Integer status) {
            this.status = status;
        }
    
        @Override
        public String toString() {
            return "Choice{" +
                    "sId='" + sId + '\'' +
                    ", qId=" + qId +
                    ", status=" + status +
                    '}';
        }
    
    }
    

    注意点
    1.@Entity 表示这是一个实体类,在运行时,jpa会在数据库中自动创建一个与实体内字段对应的表。
    2.@Id 表示主键,显然小编这里的sId为主键。
    3.小编这里重写toString是为了拿出数据的时候更方便。
    4.实体类必须要有默认的构造函数.。

    补充一点

    @Id
    @GeneratedValue
     private String sId;
    

    我们加上 @GeneratedValue就表示sId为一个自增长字段,也就不需要设置set方法了。

    如何设置联合主键呢

    首先确定你要设置的联合主键,比如小编想把sId和qId设置成一对联合组件。
    主要步骤

    1. 创建一个Choice_Map主键实现类(小编这里采用随意命名法,大佬们别吐槽)Choice_Map.class必须要实现Serializable 这个接口,注意是必须要继承。
    public class Choice_Map implements Serializable {
    private String sId;
    private int qId;
    
        public Choice_Map(){
    
        }
        public Choice_Map(String sId,int qId){
            this.qId =qId;
            this.sId =sId;
    
        }
        public String getsId() {
            return sId;
        }
    
        public void setsId(String sId) {
            this.sId = sId;
        }
    
        public int getqId() {
            return qId;
        }
    
        public void setqId(int qId) {
            this.qId = qId;
        }
    
    }
    

    按照小编这样写就对了哦!!!!!

    2.现在我们再回到Choice这个类,要做一点点修改
    修改点

    1. 增加了@IdClass(Choice_Map.class),这里就是我们刚才创建的Choice_Map要写入的地方。
    2. 在qId上面加入@Id这样联合组件就算创建好了
    // An highlighted block
    @Entity
    @IdClass(Choice_Map.class)
    public class Choice {
    
        //学生 id
        @Id
        private String sId;
        @Id
        private int qId;
        private Integer status;
        public Choice() {
            super();
        }
    
        public Choice(String sId, int qId, Integer status ) {
            this.sId = sId;
            this.qId = qId;
            this.status = status;
       
        }
    
        public String getsId() {
            return sId;
        }
    
        public void setsId(String sId) {
            this.sId = sId;
        }
    
        public int getqId() {
            return qId;
        }
    
        public void setqId(int qId) {
            this.qId = qId;
        }
    
        public Integer getStatus() {
            return status;
        }
    
        public void setStatus(Integer status) {
            this.status = status;
        }
    
        @Override
        public String toString() {
            return "Choice{" +
                    "sId='" + sId + '\'' +
                    ", qId=" + qId +
                    ", status=" + status +
                    '}';
        }
    
    }
    

    超级无敌重要的地方

    1.咋们Choice与Choice_Map中要设置联合主键类型一定要一致,否则无法运行成功。。。。。。。

    谢谢大家支持我这个苦逼自学的大学生。

    展开全文
  • 代码如下: ALTER TABLE 名字 ADD CONSTRAINT pk_名字 PRIMARY KEY( SNumber, SDate ); SNumber SDate 必须不能为空字段 您可能感兴趣的文章:sql server创建复合主键的2种方法MySQL 创建主键,外键和复合主键的...
  • 在Django model中对一张的几个字段进行联合约束和联合索引,例如在购物车中,登录的用户和商品两个字段在一起表示唯一记录。 举个栗子: Django model中购物车 class Cart(models.Model): user = models....
  • mysql联合主键

    千次阅读 2019-09-20 18:18:06
    mysql联合主键是由的多列字段值的拼接成的主键,来形成唯一性。和以往单个列的普通主键如id(自增长)的区别一个字段主键和多个字段的区别。 如果一个有id,name,sex三个字段,那...联合主键的设置: 1....
  • 2.设置联合主键;3.执行代码,发现出现错误;4.解决方案:给id自增列加UNIQUE唯一索引;5.代码执行成功;6.联合主键创建成功。7.SQL示例代码:USE testCREATE TABLE `test_table` (`id` INT(...
  • mysql可以设置联合唯一索引吗?

    千次阅读 2021-01-18 21:11:58
    mysql可以设置联合唯一索引,方法:使用“Alter table 表名 add UNIQUE index 索引名 (字段1,字段2)”语句来设置,它会删除重复的记录,保留一条,然后建立联合唯一索引。联合唯一索引项目需要将某个的某两个字段...
  • 将多个键设置成主键时提示:无法将多个 PRIMARY KEY 约束添加到 ‘表名’。 其实MS SQL是不能这样设置2个主键create table hello(id int primary key,name varchar(40) primary key); 应该是create table hello(id...
  • 第一种方法,新建时增加联合主键: create table t_students( id int not null, name varchar(10) not null Primary Key (id, name), age int, dept_id int ) 注:联合主键的列需要限制非空约束。 第二种方法...
  • Mysql update多表联合更新的方法小结

    千次阅读 2021-01-19 04:49:31
    下面我建两个,并执行一系列sql语句,仔细观察sql执行后中数据的变化,很容易就能理解多表联合更新的用法student class1. 执行 UPDATE student s , class c SET s.class_name='test00',c.stu_name='test00' ...
  • 在Django model中对一张的几个字段进行联合约束和联合索引,例如在购物车中,登录的用户和商品两个字段在一起表示唯一记录。 举个栗子: Django model中购物车 class Cart(models.Model): user = models...
  • DB2建表设置联合主键的方法

    千次阅读 2019-01-23 14:35:34
    1.使用工具DbVisualizer 2.表名TABLE_USER 3.主键1:NAME_ID 主键2:VERSION 建表语句: create table DATA_STD ( NAME_ID varchar(10) NOT NULL, THEME varchar(100), VERSION varchar(7) NOT ...联合...
  • # 设置变量并初始化 SELECT (@i := @i + 1) as ord_num, u.id, u.account, u.`name`, c.`name` team, p.`name` project FROM ( ( ( tb_user u LEFT JOIN tb_project_and_user pu ON u.id = pu.user_...
  • #大家都知道,我们的主键是不为空的,但是这时候我们要添加一个字段,与原有的主键组成联合主键,这个字段往往我们需要把它设置成一个非空的字段 这里有个坑如果原有的里面是有数据的,这是时候直接使用语句进行...
  • sql service可视化工具一些操作 记录一下 ...建立联合主键:左手按住ctrl键,鼠标点击最左边那列的小正方形,选中多行,右键菜单点第一个选项设置主键 补:删除主键: 直接右键-》删除主键 修改主键名: ...
  • 连接的方式 数据准备 student college 内连接 外连接 左外连接 右外连接 注意事项: 自连接 子查询 在上篇文章史上最简单MySQL教程详解(基础篇)之数据库设计范式及应用举例我们介绍过,在关系...
  • CREATE TABLE IF NOT EXISTS `表名`( `id` INT...KEY (`device_id`,`time`) #设置device_id,time为联合索引 foreign key (`device_id`) references device(`id`) #foreign key (字段名) references 外表名(外表名id)
  • CREATE TABLE orderitems ( order_num int(11) NOT NULL, order_item int(11) NOT NULL, prod_id char(10) NOT NULL, quantity int(11) NOT NULL, item_price decimal(8,2) NOT NULL, PRIMARY KEY (order_num,orde.....
  • Oracle多表联合查询

    千次阅读 2019-11-18 15:00:44
    —多表联合查询: –当需要获取的数据分布在多张中,考虑使用联合查询 –SQL92方式 –SQL99方式 –SQL92方式 –笛卡尔积:将多个的数据进行一一对应,所得到结果为多的笛卡尔积。 –结果的数量为所有的...
  • mysql添加联合唯一索引

    千次阅读 2016-06-08 17:49:08
    在开发过程中遇到了联合索引的问题,现在总结一下: 开发具体环境是这样的:我们有一个行业中包含省份和城市两个字段。因此需要针对这两个字段建立联合索引。 名称为:sc_blacklistcity 两个字段分别为:...
  • Hibernate 联合主键的设置

    千次阅读 2016-03-22 12:11:12
    在mysql建表时可以设置联合主键,现在要建一个一个user,user中有三个字段username,usergroup,sex,将username与usergroup设置为联合主键,建表法如下:CREATE TABLE `user` ( `usergroup` varchar(20) NOT ...
  • 在我们开发的过程中,总感觉一张就一个主键。但是事情往往没有我们想象的那么简单,一张其实也是可以有多个主键。 如上图所示,其实说多个主键也不对,可以说是复合主键。意思为 这2个字段都不是唯一的,2个...
  • 我有一张用户,一张联系人,现在希望在联系人里面将两个互为联系人的ID设为联合主键,应该怎么实现
  • 1. 建表时直接设置主键 1)在建表语句中直接设置唯一主键(该方法适用设置唯一主键): CREATE TABLE DM.TEST( TEST_ID VARCHAR(9) NOT NULL PRIMARY KEY, ...该方法可以设置联合主键 CREATE TABLE DM.IM_ACCT_MGMT_...
  • mysql添加联合主键

    千次阅读 2021-02-25 18:42:16
    创建的同时创建联合主键2.针对已经存在,添加联合主键3.删除主键约束格式: 首先解释一下什么是联合主键 联合主键,指的是把两个列看成是一个整体,这个整体是不为空,唯一,不重复 1.创建的同时创建联合主键 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 134,018
精华内容 53,607
关键字:

怎么设置联合的表