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


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):


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

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.


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)

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


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.


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 {}


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?,
)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.