SpringDataJpa创建联合索引的实现
更新时间:2021年12月08日 12:00:15 作者:414丶小哥
这篇文章主要介绍了SpringDataJpa创建联合索引的实现,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
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.lang.InterruptedException异常的问题解决
本文主要介绍了java.lang.InterruptedException异常的问题解决,这种异常通常意味着 Jenkins 任务在执行过程中被中断,这可能会导致任务失败或中止,下面就来介绍一下解决方法,感兴趣的可以了解一下2024-07-07
SpringCloud注册中心之consul详细讲解使用方法
Consul是一款由HashiCorp公司开源的,用于服务治理的软件,Spring Cloud Consul对其进行了封装,这篇文章主要介绍了springcloud组件consul服务治理,需要的朋友可以参考下2022-11-11


最新评论