@UniqueConstraint anotasi di Jawa

168

Saya punya kacang Jawa. Sekarang, saya ingin memastikan bahwa bidangnya harus unik.

Saya menggunakan kode berikut:

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

Tapi saya mendapatkan beberapa kesalahan:

@UniqueConstraint is dissallowed for this location

Apa cara yang tepat untuk menggunakan batasan unik?

Catatan: Saya menggunakan kerangka kerja play.

xyz
sumber
15
"Tapi aku mendapatkan beberapa kesalahan." Selalu tentukan kesalahan apa yang Anda dapatkan dalam pertanyaan. Anda memiliki informasi yang relevan yang mungkin sangat membantu kami untuk menyelesaikan masalah Anda - jangan menyimpannya untuk diri Anda sendiri.
Jon Skeet
Apakah mungkin menggunakan anotasi @id?
Albinoswordfish

Jawaban:

414

Untuk memastikan nilai bidang unik, Anda dapat menulis

@Column(unique=true)
String username;

Anotasi @UniqueConstraint adalah untuk membubuhi keterangan beberapa kunci unik di tingkat tabel, itulah sebabnya Anda mendapatkan kesalahan saat menerapkannya ke bidang.

Referensi (JPA TopLink):

mdma
sumber
17
Penting untuk dicatat bahwa ini hanya akan berfungsi jika Anda membiarkan JPA membuat tabel Anda
naoru
118

Anda dapat menggunakan di tingkat kelas dengan sintaks berikut

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

Saya saat ini menggunakan kerangka bermain juga dengan hibernate dan JPA 2.0 annotation dan model ini berfungsi tanpa masalah

@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;

}

Semoga ini bisa membantu.

FrancescoM
sumber
20

Catatan: Di Kotlin sintaks untuk mendeklarasikan array dalam penggunaan anotasi arrayOf(...)bukan{...}

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

Catatan: Pada Kotlin 1.2, dimungkinkan untuk menggunakan [...]sintaks sehingga kode menjadi lebih sederhana

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

Way1:

@Entity

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

- Di sini baik Column1 dan Column2 bertindak sebagai batasan unik secara terpisah. Mis: jika suatu saat nilai dari nilai kolom1 atau kolom2 cocok maka Anda akan mendapatkan Kesalahan UNIQUE_CONSTRAINT.

Way2:

@Entity

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

- Di sini nilai gabungan kedua kolom1 dan kolom2 bertindak sebagai batasan unik

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

   }

Batasan unik hanya digunakan untuk membuat kunci komposit, yang akan menjadi unik. Ini akan mewakili tabel sebagai kunci utama digabungkan sebagai unik.

CodamRanjan
sumber
3

Anda bisa menggunakan @UniqueConstraint di tingkat kelas, untuk kunci utama gabungan dalam sebuah tabel. sebagai contoh:

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

ProductAttribute kelas publik {}

hash yousefi
sumber
1

Anotasi unik harus ditempatkan tepat di atas pernyataan atribut. UniqueContraints masuk ke anotasi @Tabel di atas deklarasi kelas data. Lihat di bawah:

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