자바에서의 @UniqueConstraint 주석
나는 자바빈을 가지고 있어요.이제 이 분야가 고유해야 합니다.
다음 코드를 사용하고 있습니다.
@UniqueConstraint(columnNames={"username"})
public String username;
하지만 몇 가지 오류가 발생했습니다.
@UniqueConstraint is dissallowed for this location
고유한 제약을 사용하는 적절한 방법은 무엇입니까?
주의: 플레이 프레임워크를 사용하고 있습니다.
필드 값을 고유하게 하기 위해 다음과 같이 쓸 수 있습니다.
@Column(unique=true)
String username;
@UniqueConstraint 주석은 테이블레벨에서 여러 개의 고유 키에 주석을 붙이기 위한 것입니다.이 때문에 필드에 적용할 때 오류가 발생합니다.
레퍼런스(JPA TopLink):
클래스 레벨에서 다음 구문을 사용하여 사용할 수 있습니다.
@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"username"})})
public class SomeEntity {
@Column(name = "username")
public String username;
}
현재 하이버네이션과 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;
}
도움이 됐으면 좋겠다.
주의: 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)
방법 1:
@Entity
@Table(name = "table_name",
uniqueConstraints={
@UniqueConstraint(columnNames = "column1"),
@UniqueConstraint(columnNames = "column2")
}
)
-> 여기서 Column1과 Column2는 각각 고유한 제약조건으로 기능합니다.Ex : column1 값 또는 column2 값 중 하나가 일치할 경우 UNIQURE_CONSTRAREN Error가 발생합니다.
방법 2:
@Entity
@Table(name = "table_name",
uniqueConstraints={@UniqueConstraint(columnNames ={"column1","column2"})})
-> 여기서 column1과 column2의 조합된 값은 모두 고유한 제약조건으로 작용합니다.
@Entity @Table(name = "stock", catalog = "mkyongdb",
uniqueConstraints = @UniqueConstraint(columnNames =
"STOCK_NAME"),@UniqueConstraint(columnNames = "STOCK_CODE") }) public
class Stock implements java.io.Serializable {
}
고유하게 되는 복합 키를 만드는 데만 사용되는 고유 제약 조건입니다.테이블은 프라이머리 키로서 일의로서 조합되어 표시됩니다.
@UniqueConstraint 이 주석은 쉼표로 구분된 테이블레벨에서 1개 또는 여러 개의 고유 키에 주석을 달 때 사용됩니다.그 때문에 에러가 발생합니다.JPA에서 테이블을 생성하도록 할 경우에만 작동합니다.
예
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Builder(builderClassName = "Builder", toBuilder = true)
@Entity
@Table(name = "users", uniqueConstraints = @UniqueConstraint(columnNames = {"person_id", "company_id"}))
public class AppUser extends BaseEntity {
@Column(name = "person_id")
private Long personId;
@ManyToOne
@JoinColumn(name = "company_id")
private Company company;
}
https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/UniqueConstraint.html
한편 필드 값이 고유하도록 하려면 다음과 같이 쓸 수 있습니다.
@Column(unique=true)
String username;
컬럼 구속조건의 정의
고유한 제약 조건이 하나의 필드에만 기반할 때마다 해당 열에 @Column(unique=true)을 사용할 수 있습니다.
person Number 필드에 고유한 제약조건을 정의합니다.
@Column(unique=true)
private Long personNumber;
스키마 작성 프로세스를 실행하면 로그에서 검증할 수 있습니다.
[main] DEBUG org.hibernate.SQL -
alter table Person add constraint UK_d44q5lfa9xx370jv2k7tsgsqt unique (personNumber)
고유 제약 조건의 정의
JPA는 @UniqueConstraint 주석을 사용하여 이를 달성할 수 있도록 지원합니다.uniqueConstraints 속성 아래의 @Table 주석에서 이를 수행합니다.열의 이름을 지정해야 합니다.
@Table(uniqueConstraints = { @UniqueConstraint(columnNames = { "personNumber", "isActive" }) })
스키마가 생성되면 검증할 수 있습니다.
[main] DEBUG org.hibernate.SQL -
alter table Person add constraint UK5e0bv5arhh7jjhsls27bmqp4a unique (personNumber, isActive)
테이블 내의 조합된 프라이머리 키에 대해 클래스레벨에서 @UniqueConstraint를 사용할 수 있습니다.예를 들어 다음과 같습니다.
@Entity
@Table(name = "PRODUCT_ATTRIBUTE", uniqueConstraints = {
@UniqueConstraint(columnNames = {"PRODUCT_ID"}) })
퍼블릭 클래스 ProductAttribute{}
고유한 주석을 속성 선언 바로 위에 배치해야 합니다.UniqueControls는 데이터 클래스 선언 위의 @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?,
)
length 속성 값은 name attribute length보다 크거나 같아야 합니다.
작동하다
@Column(name = "typ e", length = 4, unique = true)
private String type;
작동하지 않습니다. type.length: 4!= 길이 속성: 3
@Column(name = "type", length = 3, unique = true)
private String type;
는 ★★★★★★★★★★★★★★★★★★★★★ @Column(name = "column_name", length = 11, unique = true)
언급URL : https://stackoverflow.com/questions/3126769/uniqueconstraint-annotation-in-java
'source' 카테고리의 다른 글
| vue-cli 설정 중 문제 발생 (0) | 2022.08.11 |
|---|---|
| [N...]이란?C 집약 이니셜라이저의 M > 평균? (0) | 2022.08.11 |
| 함수 포인터의 배열을 사용하려면 어떻게 해야 합니까? (0) | 2022.08.11 |
| Linux 커널은 어떻게 컴파일 할 수 있습니까? (0) | 2022.08.11 |
| Collections.emptyMap()과 새로운 HashMap()의 비교 (0) | 2022.08.11 |