Уникальное ограничение не создано в JPA - PullRequest
7 голосов
/ 31 мая 2010

Я создал следующий объектный компонент и указал два столбца как уникальные. Теперь моя проблема в том, что таблица создается без ограничения уникальности и без ошибок в журнале. У кого-нибудь есть идея?

@Entity
@Table(name = "cm_blockList", uniqueConstraints = @UniqueConstraint(columnNames = {"terminal", "blockType"}))
public class BlockList {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name="terminal")
    private Terminal terminal;
    @Enumerated(EnumType.STRING)
    private BlockType blockType;
    private String regEx;
}

Ответы [ 5 ]

6 голосов
/ 09 июня 2010

Ну, я нашел другой способ сделать дизайн. Больше, потому что дизайн развивался, а не работа вокруг.
Однако я слышал от коллеги, у которой была такая же проблема, что уникальные ограничения создаются только в hibernate (мы запускаем JBoss 4.3), когда создается вся база данных. Он не будет работать при создании новой таблицы в существующей базе данных.
Поэтому в файле persistence.xml необходимо установить hibernate.hbm2ddl.auto на create-drop, чтобы это работало. Я не могу подтвердить это, хотя.

2 голосов
/ 01 сентября 2012

Вам не нужно отбрасывать все, просто отбросьте эту конкретную таблицу, для которой вы хотите создать уникальный индекс для

0 голосов
/ 03 апреля 2014

Я тоже сталкивался с той же проблемой, но добавление unique-key="UK1_test" в файл сопоставления работало нормально.

<property name="hibernate.hbm2ddl.auto">create</property> с unique-key="UK1_test" unique="true" в созданном файле отображения alter table employee add constraint UK1_test unique (addrId)

0 голосов
/ 09 апреля 2013

Если вы хотите уникальное ограничение, вы должны сделать это по sql:

ALTER TABLE cm_blockList ADD CONSTRAINT cm_blockList_unq UNIQUE (terminal);

Смотри также: https://stackoverflow.com/a/3498242/1244488

0 голосов
/ 31 мая 2010

Больше предложений, чем реальный ответ ...

  • Вы должны уточнить, какого провайдера JPA (и версию) вы используете для таких вопросов.

  • Я заметил, что один из ваших столбцов является частью ассоциации ManyToOne, это может быть "особый" случай, который не очень хорошо рассматривается вашим провайдером JPA. Под нехорошим обращением я имею в виду ошибку. Я бы проверил систему отслеживания проблем на наличие существующей проблемы (и, возможно, создаю новую, ваш случай кажется совместимым с JPA).

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