У меня есть таблица транзакций и счетов
@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?
Если добавить такое ограничение невозможно, каков наилучший способ его достижения?