2010-05-31 2 views
5

다음 엔티티 bean을 작성하고 고유 한 것으로 두 개의 컬럼을 지정했습니다. 이제 내 문제는 테이블이 유일한 제약없이 생성되고 로그에 오류가 없다는 것입니다. 누구나 아이디어가 있습니까? 진짜 대답보다는JPA에서 고유 제한 조건이 생성되지 않았습니다.

@Entity 
@Table(name = "cm_blockList", uniqueConstraints = @UniqueConstraint(columnNames = {"terminal", "blockType"})) 
public class BlockList { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 
    @ManyToOne(cascade = CascadeType.PERSIST) 
    @JoinColumn(name="terminal") 
    private Terminal terminal; 
    @Enumerated(EnumType.STRING) 
    private BlockType blockType; 
    private String regEx; 
} 
+0

를 만들었습니다. – homaxto

답변

5

글쎄, 디자인을 만드는 또 다른 방법을 찾았습니다. 주변 환경을 고려한 디자인보다 진화 된 디자인이기 때문입니다.
그러나 나는 동료들로부터 같은 문제가 있었다는 소식을 들었습니다. 전체 데이터베이스가 생성 될 때 유일한 제약 조건은 최대 절전 모드 (JBoss 4.3을 실행 중입니다)에 의해서만 생성된다는 것입니다. 기존 데이터베이스에 새 테이블을 만들면 작동하지 않습니다.
persistence.xml에서 작동하게하려면 hibernate.hbm2ddl.auto에서 create-drop으로 설정해야합니다. 나는 이것을 확인할 수 없다. 당신은 모든 것을 드롭 필요 없다

+0

homaxto 귀하의 관찰이 정확합니다. 나는 똑같은 상황에 직면했고 생성 - 놓기가 설정 될 때 제약이 작용한다. –

+0

나는 동일한 문제가 있었고 전체 데이터베이스를 다시 만들었고 – greuze

0

추가 제안 ...

  • 당신은 JPA 제공자 (그리고 버전) 당신은 같은 질문에 대한 사용을 명확히해야한다.

  • 열 중 하나가 ManyToOne 연결의 일부인 것을 알게되었습니다. 이는 JPA 제공 업체가 제대로 처리하지 못하는 "특별한"사례 일 수 있습니다. 잘 처리되지 않으면, 나는 버그를 의미합니다. 기존 이슈에 대한 이슈 트래커를 확인해 보았습니다. (아마도 새로운 것을 생성하고, JPA를 준수하는 것으로 보입니다).

2

, 그냥 당신이 고유 제한 조건을 원하는 경우에

1

에 대한 고유 인덱스를 만들려면이 특정 테이블을 삭제, 당신은 SQL하여 수행해야합니다

ALTER TABLE cm_blockList ADD CONSTRAINT cm_blockList_unq UNIQUE (terminal); 

참조도 : https://stackoverflow.com/a/3498242/1244488

0

또한 동일한 문제가 발생했지만 매핑 파일에 unique-key="UK1_test"을 추가해도 문제가 없습니다. 매핑 파일에 unique-key="UK1_test" unique="true"

<property name="hibernate.hbm2ddl.auto">create</property> 우리의 서버, 제이 보스입니다 따라서 JPA 공급자가 내가 믿는 최대 절전 모드입니다 alter table employee add constraint UK1_test unique (addrId)