Java'da @UniqueConstraint ek açıklaması


168

Bir Java fasulyem var. Şimdi, alanın benzersiz olması gerektiğinden emin olmak istiyorum.

Aşağıdaki kodu kullanıyorum:

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

Ama bazı hatalar alıyorum:

@UniqueConstraint is dissallowed for this location

Benzersiz kısıtlamaları kullanmanın doğru yolu nedir?

Not: Oyun çerçevesi kullanıyorum.


15
"Ama bazı hatalar alıyorum." Her zaman soruda hangi hatayı aldığınızı belirtin. Sorununuzu çözmemize çok yardımcı olabilecek ilgili bilgileriniz var - bunu kendinize saklamayın.
Jon Skeet

@İd ek açıklamasını kullanmak mümkün müdür?
Albinoswordfish

Yanıtlar:


415

Bir alan değerinin benzersiz olmasını sağlamak için yazabilirsiniz

@Column(unique=true)
String username;

@UniqueConstraint ek açıklaması, tablo düzeyinde birden çok benzersiz anahtara açıklama eklemek içindir, bu nedenle bir alana uygularken bir hata alırsınız.

Referanslar (JPA TopLink):


17
Sadece
JPA'nın

118

Aşağıdaki sözdizimiyle sınıf düzeyinde kullanabilirsiniz

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

42

Şu anda hibernate ve JPA 2.0 ek açıklamalarıyla da oyun çerçevesini kullanıyorum ve bu model sorunsuz çalışıyor

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

}

Umarım yardımcı olmuştur.


20

Not: Kotlin'de, ek açıklamalarda dizileri bildirme sözdizimi arrayOf(...),{...}

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

Not: Kotlin 1.2'den itibaren [...]sözdizimini kullanmak mümkündür, böylece kod çok daha basit hale gelir

@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")})

- Burada hem Sütun1 hem de Sütun2 ayrı ayrı benzersiz kısıtlamalar görevi görür. Örn: sütun1 veya sütun2 değerinin herhangi bir değeri eşleşirse UNIQUE_CONSTRAINT Hatası alırsınız.

Way2:

@Entity

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

- Burada hem column1 hem de column2 birleşik değerleri benzersiz kısıtlamalar olarak işlev görür


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

   }

Yalnızca benzersiz olacak birleşik anahtar oluşturmak için kullanılan benzersiz kısıtlamalar.


3

bir tabloda birleştirilmiş birincil anahtar için sınıf düzeyinde @UniqueConstraint kullanabilirsiniz. Örneğin:

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

genel sınıf ProductAttribute {}


1

Benzersiz ek açıklama, özellik bildiriminin hemen üstüne yerleştirilmelidir. UniqueContraints, veri sınıfı bildiriminin üzerindeki @Table ek açıklamasına gider. Aşağıya bakınız:

@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?,
)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.