Проверьте, существует ли объект базы данных с указанными значениями поля - PullRequest
0 голосов
/ 17 октября 2018

Я новичок в Spring Data, и мне нужно установить невозможность создания нового объекта в БД, если объект уже существует с такими же значениями поля.

Условие сравнения: если поле "closeType" и поле соглашения "id" новой сущности равны полям сущности базы данных, я не могу добавить эту сущность в БД.Как это сделать?

Моя сущность:

@Entity
@Table(name = "contract")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Contract implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "contractGenerator")
    @SequenceGenerator(name = "contractGenerator", sequenceName = "contract_sequence")
    private Long id;

    @Column(name = "start_date")
    private LocalDate startDate;

    @Column(name = "end_date")
    private LocalDate endDate;

    @Column(name = "first_pay_date")
    private LocalDate firstPayDate;

    @Column(name = "next_pay_date")
    private LocalDate nextPayDate;

    //Here is thу first field for comparison   
    @Enumerated(EnumType.STRING)
    @Column(name = "close_type")
    private CloseType closeType;

    @ManyToOne
    @JsonIgnoreProperties("")
    private Mentor mentor;

    //Here is second ID agreement field for comparison
    @ManyToOne
    @JsonIgnoreProperties("")
    private Agreement agreement;
     ...............
   //getters and setters

Мне нужно заблокировать возможность создания нескольких активных контрактов ("closeType") в одном соглашении ("id")

1 Ответ

0 голосов
/ 18 октября 2018

Мне нужно заблокировать возможность создания нескольких активных контрактов ("closeType") в одном соглашении ("id")

вы можете использовать UniqueConstraint Как ввести несколькоограничение столбца с аннотациями JPA?

...
@Table(uniqueConstraints={
    @UniqueConstraint(columnNames = {"close_type", "agreement"})
}) 
Contract implements Serializable  {
    ...
}

Спасибо, может быть, вы могли бы намекнуть, как установить ограничение для closeType, если, например, будут использоваться только поля closeType со значением Null?Но другие значения closeType не будут уникальными

Как аннотировать уникальное ограничение с помощью предложения WHERE в JPA :

создание частичных индексов (CREATE INDEX... ON ... WHERE) JPA не использует JPA.Вы не можете использовать уникальное ограничение для этой цели, потому что уникальные частичные индексы не являются уникальными ограничениями.Некоторые провайдеры JPA предлагают аннотации расширений, специфичные для этого провайдера JPA, которые добавляют функции для запуска собственных сценариев DDL, определения индексов с аннотациями и т. Д. Поскольку вы не упомянули, какого провайдера JPA вы используете, я не могу вам больше рассказать.Вот документация для индекса EclipseLink DDL;

Предлагаю вам взглянуть на Как аннотировать уникальное ограничение с помощью предложения WHERE в JPA

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