@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?,
)