翻译约束检查 spring jpa 中的任一列不为空

use*_*655 5 spring hibernate spring-data spring-data-jpa

我有以下带有约束检查的 SQL 表。我如何在 spring jpa 中翻译它?

CREATE TABLE IF NOT EXISTS `myschema`.`product` (
  `id` INT(10) NOT NULL AUTO_INCREMENT,
  `barcode` VARCHAR(10) NULL DEFAULT NULL,
  `vrcode` VARCHAR(10) NULL DEFAULT NULL,
  `name` VARCHAR(50) NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `barcode_UNIQUE` (`barcode` ASC),
  UNIQUE INDEX `vrcode_UNIQUE` (`vrcode` ASC),
  CONSTRAINT CHECK (barcode IS NOT NULL OR vrcode IS NOT NULL))
  ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARACTER SET = latin1;
Run Code Online (Sandbox Code Playgroud)

我希望列条形码或 vrcode 之一不能为空。

@Data
@RequiredArgsConstructor
@Entity
@Table(name = "product")
public class Product implements Serializable {

    private static final long serialVersionUID = -1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "barcode")
    private String barcode;

    @Column(name = "vrcode")
    private String vrcode;

    @Column(name = "name")
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

ati*_*h.s 7

您必须添加对实体本身的检查,如下所示

@Data
@RequiredArgsConstructor
@Entity
@Table(name = "product")
@Check(constraints = "barcode IS NOT NULL OR vrcode IS NOT NULL") 
public class Product implements Serializable {
...
Run Code Online (Sandbox Code Playgroud)

注意:@RequiredArgsConstructor已提供注释@Data