@UniqueConstraint аннотация в Java - PullRequest
145 голосов
/ 27 июня 2010

У меня есть боб Java. Теперь я хочу быть уверен, что поле должно быть уникальным. Я использую следующий код:

@UniqueConstraint(columnNames={"username"})
public String username;

Но получаю ошибку:

@UniqueConstraint is dissallowed for this location

Как правильно использовать уникальные ограничения?

Примечание: Я использую игровую среду.

Ответы [ 8 ]

361 голосов
/ 27 июня 2010

Чтобы убедиться, что значение поля уникально, вы можете написать

@Column(unique=true)
String username;

Аннотация @UniqueConstraint предназначена для аннотирования нескольких уникальных ключей на уровне таблицы, поэтому вы получаете ошибку при применении ее к полю.

Ссылки (JPA TopLink):

100 голосов
/ 24 июля 2013

Вы можете использовать на уровне класса со следующим синтаксисом

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"username"})})
public class SomeEntity {
    @Column(name = "username")
    public String username;
}
35 голосов
/ 28 июля 2014

В настоящее время я использую игровой фреймворк с hibernate и аннотацией JPA 2.0, и эта модель работает без проблем

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames = {"id_1" , "id_2"})})
public class class_name {

@Id
@GeneratedValue
public Long id;

@NotNull
public Long id_1;

@NotNull
public Long id_2;

}

Надеюсь, это помогло.

18 голосов
/ 17 июня 2016

Примечание: В Kotlin синтаксис объявления массивов в аннотациях использует arrayOf(...) вместо {...}

@Entity
@Table(uniqueConstraints=arrayOf(UniqueConstraint(columnNames=arrayOf("book", "chapter_number"))))
class Chapter(@ManyToOne var book:Book,
              @Column var chapterNumber:Int)

Примечание: По состоянию на Kotlin1.2 можно использовать синтаксис [...], чтобы код стал намного проще

@Entity
@Table(uniqueConstraints=[UniqueConstraint(columnNames=["book", "chapter_number"])])
class Chapter(@ManyToOne var book:Book,
              @Column var chapterNumber:Int)
7 голосов
/ 08 мая 2018

Way1:

@Entity

@Table(name = "table_name", uniqueConstraints={@UniqueConstraint(columnNames = "column1"),@UniqueConstraint(columnNames = "column2")})

- Здесь и Column1, и Column2 действуют как уникальные ограничения отдельно. Пример: если в любое время значение столбца1 или столбца2 совпадает, вы получите ошибку UNIQUE_CONSTRAINT.

Way2:

@Entity

@Table(name = "table_name", uniqueConstraints={@UniqueConstraint(columnNames ={"column1","column2"})})

- Здесь объединенные значения для column1 и column2 действуют как уникальные ограничения

4 голосов
/ 15 октября 2014
   @Entity @Table(name = "stock", catalog = "mkyongdb",
   uniqueConstraints = @UniqueConstraint(columnNames =
   "STOCK_NAME"),@UniqueConstraint(columnNames = "STOCK_CODE") }) public
   class Stock implements java.io.Serializable {

   }

Уникальные ограничения, используемые только для создания составного ключа, который будет уникальным. Он будет представлять таблицу как первичный ключ, объединенный как уникальный.

3 голосов
/ 29 ноября 2016

вы можете использовать @UniqueConstraint на уровне класса для комбинированного первичного ключа в таблице.например:

 @Entity
 @Table(name = "PRODUCT_ATTRIBUTE", uniqueConstraints = {
       @UniqueConstraint(columnNames = {"PRODUCT_ID"}) })

открытый класс ProductAttribute {}

0 голосов
/ 09 февраля 2018

Уникальная аннотация должна быть размещена прямо над объявлением атрибута. UniqueContraints входят в аннотацию @Table над объявлением класса данных. Смотрите ниже:

@Entity
@Table(uniqueConstraints= arrayOf(UniqueConstraint(columnNames = arrayOf("col_1", "col_2"))))
data class Action(
        @Id @GeneratedValue @Column(unique = true)
        val id: Long?,
        val col_1: Long?,
        val col_2: Long?,
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...