欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

SpringDataJpa创建联合索引的实现

时间:2023-01-08 11:12:30|栏目:JAVA代码|点击:

SpringDataJpa创建联合索引

在这里插入图片描述

创建联合索引对应类

/**
 * 作者:guoyzh
 * 时间:2019/12/30 14:58
 * 功能:戴镜视力复查联合主键
 */
@Data
@Embeddable
public class VisualReexaminationUnionKey implements Serializable {
    @Column(name = "id")
    private String id;
    @Column(name = "c_review_date")
    private java.sql.Timestamp cReviewDate;
}

创建映射实体类

@Table(name = "qy_visual_reexamination")
@Entity
@Data
public class QyVisualReexamination {
    /*@Id
    @Column(nullable = true, name = "id")
    private String id;
    @Id
    @Column(nullable = true, name = "c_review_date")
    private java.sql.Timestamp cReviewDate;*/
    // 复合主键
    @EmbeddedId
    private VisualReexaminationUnionKey id;
    @Column(nullable = true, name = "c_clientid")
    private String cClientid;
    @Column(nullable = true, name = "c_ygscode")
    private String cYgscode;
    @Column(nullable = true, name = "c_primary_vision_r")
    private String cPrimaryVisionR;
    @Column(nullable = true, name = "c_primary_vision_l")
    private String cPrimaryVisionL;
    @Column(nullable = true, name = "c_ball_r")
    private String cBallR;
    @Column(nullable = true, name = "c_ball_l")
    private String cBallL;
    @Column(nullable = true, name = "c_pole_r")
    private String cPoleR;
    @Column(nullable = true, name = "c_pole_l")
    private String cPoleL;
    @Column(nullable = true, name = "c_axes_r")
    private String cAxesR;
    @Column(nullable = true, name = "c_axes_l")
    private String cAxesL;
    @Column(nullable = true, name = "c_add_r")
    private String cAddR;
    @Column(nullable = true, name = "c_add_l")
    private String cAddL;
    @Column(nullable = true, name = "c_check_r")
    private String cCheckR;
    @Column(nullable = true, name = "c_check_l")
    private String cCheckL;
    @Column(nullable = true, name = "c_proposal")
    private String cProposal;
    @Column(nullable = true, name = "c_com")
    private String cCom;
}

添加新数据

@Override
public Object addVisualReexamination(String id, String clientId, String reviewDate, String ygsCode, String primaryVisionR,
                                     String primaryVisionL, String ballR, String ballL, String poleR, String poleL, String axesR,
                                     String axesL, String addR, String addL, String checkR, String checkL, String proposal, String comId) {
    QyVisualReexamination bean = new QyVisualReexamination();
    // 生成联合索引
    VisualReexaminationUnionKey unionId = new VisualReexaminationUnionKey();
    unionId.setCReviewDate(Timestamp.valueOf(reviewDate));
    unionId.setId(id);
    bean.setId(unionId);
    bean.setCClientid(clientId);
    bean.setCYgscode(ygsCode);
    bean.setCPrimaryVisionR(primaryVisionR);
    bean.setCPrimaryVisionL(primaryVisionL);
    bean.setCBallR(ballR);
    bean.setCBallL(ballL);
    bean.setCPoleR(poleR);
    bean.setCPoleL(poleL);
    bean.setCAxesR(axesR);
    bean.setCAxesL(axesL);
    bean.setCAddR(addR);
    bean.setCAddL(addL);
    bean.setCCom(comId);
    bean.setCCheckR(checkR);
    bean.setCCheckL(checkL);
    bean.setCProposal(proposal);
    QyVisualReexamination save = mQyVisualReexaminationDao.save(bean);
    return save.getId();
}

SpringDataJpa指定联合索引

如何,现在我的表里使用订单ID和产品ID作为唯一索引,那么需要在定义表实体类时

在@Table中指定UniqueConstraint

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
/**
 * 产品表
 *
 * @author wulinfeng
 * @since 2019/12/13
 */
@Entity
@Table(name = "t_product", uniqueConstraints = @UniqueConstraint(columnNames = {"orderId", "productId"}))
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class ProductItem {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // 订单Id
    @Column(nullable = false, length = 32)
    private String orderId;
    // 受理产品编码
    @Column(length = 32)
    private String productId;
    // 产品名称
    @Column(length = 32)
    private String productName;
    // 时间戳
    @Column(length = 13)
    private Long timestamp;
}

把原来的t_product表drop掉,重启spring boot,再看该表

自动加上唯一索引了

mysql> show index from t_product;
+-----------+------------+-----------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table     | Non_unique | Key_name                    | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-----------+------------+-----------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| t_product |          0 | PRIMARY                     |            1 | id          | A         |           2 |     NULL | NULL   |      | BTREE      |         |               |
| t_product |          0 | UK1mvw2lcd07t4cuicl4awfbgkw |            1 | order_id    | A         |           2 |     NULL | NULL   |      | BTREE      |         |               |
| t_product |          0 | UK1mvw2lcd07t4cuicl4awfbgkw |            2 | product_id  | A         |           2 |     NULL | NULL   | YES  | BTREE      |         |               |
+-----------+------------+-----------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
3 rows in set (0.00 sec)

上一篇:Java字符串编码解码性能提升的技巧分享

栏    目:JAVA代码

下一篇:处理Log4j2不能打印行号的问题(AsyncLogger)

本文标题:SpringDataJpa创建联合索引的实现

本文地址:http://www.codeinn.net/misctech/223255.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有