@UniqueConstraint аннотация в Java

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

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

Но я получаю некоторую ошибку:

@UniqueConstraint is dissallowed for this location

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

Примечание. Я использую фреймворк.

Ответ 1

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

@Column(unique=true)
String username;

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

Ссылки (JPA TopLink):

Ответ 2

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

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"username"})})
public class SomeEntity {
    @Column(name = "username")
    public String username;
}

Ответ 3

В настоящее время я использую play framework с аннотацией спящего режима и 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;

}

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

Ответ 4

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

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

Примечание: Как и в случае с Kotlin 1.2, можно использовать синтаксис [...], чтобы код стал намного проще

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

Ответ 5

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 действуют как уникальные ограничения

Ответ 6

   @Entity @Table(name = "stock", catalog = "mkyongdb",
   uniqueConstraints = @UniqueConstraint(columnNames =
   "STOCK_NAME"),@UniqueConstraint(columnNames = "STOCK_CODE") }) public
   class Stock implements java.io.Serializable {

   }

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

Ответ 7

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

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

public class ProductAttribute {}

Ответ 8

Уникальная аннотация должна быть размещена прямо над объявлением атрибута. 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?,
)