Java의 @UniqueConstraint 주석


168

Java bean이 있습니다. 이제 필드가 고유해야합니다.

다음 코드를 사용하고 있습니다.

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

하지만 오류가 발생했습니다.

@UniqueConstraint is dissallowed for this location

고유 제한 조건을 사용하는 올바른 방법은 무엇입니까?

참고 : 나는 놀이 프레임 워크를 사용하고 있습니다.


15
"그러나 오류가 발생했습니다." 질문에서 어떤 오류가 발생했는지 항상 지정하십시오. 문제를 해결하는 데 도움이 될 수있는 관련 정보가 있습니다. 자신에게 보관하지 마십시오.
Jon Skeet

@id 주석을 사용할 수 있습니까?
Albinoswordfish

답변:


413

필드 값이 고유하도록 작성하면

@Column(unique=true)
String username;

@UniqueConstraint 주석은 테이블 수준에서 여러 개의 고유 키에 주석을 달기위한 것이므로 필드에 적용 할 때 오류가 발생합니다.

참고 문헌 (JPA TopLink) :


16
JPA에서 테이블을 만들도록 한 경우에만 작동한다는 점에 유의해야합니다.
naoru

118

다음과 같은 구문으로 클래스 수준에서 사용할 수 있습니다

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

41

나는 현재 최대 절전 모드 및 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;

}

도움이 되었기를 바랍니다.


20

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

13

Way1 :

@Entity

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

-여기서 Column1과 Column2는 모두 고유 제약 조건으로 작동합니다. 예 : 언제든지 column1 또는 column2 값이 일치하면 UNIQUE_CONSTRAINT 오류가 발생합니다.

Way2 :

@Entity

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

-column1과 column2 결합 된 값은 모두 고유 한 제약 조건으로 작용합니다.


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

   }

복합 키를 생성하는 데만 사용되는 고유 제한 조건은 고유하며, 고유 키로 결합 된 기본 키로 테이블을 표시합니다.


3

테이블의 결합 된 기본 키에 대해 클래스 수준에서 @UniqueConstraint를 사용할 수 있습니다. 예를 들면 다음과 같습니다.

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

공개 클래스 ProductAttribute {}


1

고유 한 주석은 속성 선언 바로 위에 위치해야합니다. 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?,
)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.