MySQL 8 JPA Hibernate Проверка ограничения Spring Boot - PullRequest
0 голосов
/ 10 марта 2020

У меня есть таблица транзакций и счетов

@Data
@Entity
public class Transaction implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long transactionId;

    @NotNull
    private String transactionType;
    private Timestamp createdTime;
    private Double transactionAmount;

    @ManyToOne
    @JoinColumn(nullable = false)
    private Account fromAccount;

    @ManyToOne
    @JoinColumn(nullable = false)
    private Account toAccount;
@Entity
@Data
public class Account implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    @Pattern(regexp = Constants.ACCOUNT_NUMBER_REGEX)
    @Column(unique = true, nullable = false, length = 17)
    @Size(min = 1, max = 17)
    private String accountNumber;

    @NotNull
    @Column(nullable = false, length = 50)
    private String accountType;

    @NotNull
    @Column(nullable = false)
    private Double accountBalance;

    @OneToMany(mappedBy = "fromAccount")
    private Set<Transaction> debitTransactions = new HashSet<>();

    @OneToMany(mappedBy = "toAccount")
    private Set<Transaction> creditTransactions = new HashSet<>();

Вот application.yml

jpa:
    hibernate:
      ddl-auto: update
      use-new-id-generator-mappings: false
    show-sql: true
    properties:
      hibernate.id.new_generator_mappings: true
      hibernate.connection.provider_disables_autocommit: true
      hibernate.cache.use_second_level_cache: false
      hibernate.cache.use_query_cache: false
      hibernate.generate_statistics: false
      hibernate.jdbc.batch_size: 25
      hibernate.order_inserts: true
      hibernate.order_updates: true
      hibernate.query.fail_on_pagination_over_collection_fetch: true
      hibernate.query.in_clause_parameter_padding: true
      hiberante.dialect: org.hibernate.dialect.MySQL8Dialect

Вопрос : Как мне создать ограничение проверки таким образом, чтобы отдельные записи строки в таблице транзакций не совпадали?

Другими словами, в одной и той же учетной записи не должно быть транзакций (fromAccount != toAccount для отдельных записей строк).

При просмотре MySQL 8 Документов , будет ли это соответствовать весь столбец друг с другом или отдельные атрибуты строки. Может кто-нибудь сказать мне, как это работает для операций CRUD?

Если добавить такое ограничение невозможно, каков наилучший способ его достижения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...