source

자바에서의 @UniqueConstraint 주석

goodcode 2022. 8. 11. 22:19
반응형

자바에서의 @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

반응형