Лучший способ предотвратить нарушение уникальных ограничений с помощью JPA

У меня есть Keyword и KeywordType как сущности. Есть много ключевых слов нескольких типов.

При попытке сохранить второе ключевое слово типа ограничение уникальности нарушается, и транзакция откатывается.

Выполняя поиск, я нашел несколько вариантов (некоторые из них относятся к разным контекстам, поэтому я '
То же самое относится к блокировке, предложенной для другой ситуации здесь
Пользовательские инструкции вставки, предложенные в this и this сообщениях, я думаю, не будет работать должным образом, поскольку Я использую Oracle, а не MySQL, и мне хотелось бы привязать реализацию к Hibernate.

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

Итак, что будет лучшим - наиболее надежным , портативный (для разных баз данных и поставщиков персистентности) и разумный подход здесь?

Спасибо.

Участвующие организации:

public class Keyword {

    @Id
    @GeneratedValue
    private long id;

    @Column(name = "VALUE")
    private String value;

    @ManyToOne
    @JoinColumn(name = "TYPE_ID")
    private KeywordType type;
    ...
}

и

@Entity
@Table(uniqueConstraints = {@UniqueConstraint(columnNames = { "TYPE" }) })
public class KeywordType {

    @Id
    @GeneratedValue
    private long id;

    @Column(name = "TYPE")
    private String type;
    ...
}

5
задан Community 23 May 2017 в 12:16
поделиться