2010-01-28 3 views
7

"Group"이라는 엔티티 클래스가 있고 NetBeans에서 "엔티티 테이블 이름이 예약 된 Java Persistence QL 키워드"라고 경고합니다.JPA에서 예약 된 JPQL 키워드 사용

비슷한 경우는 예약 된 SQL 키워드를 사용하는 경우입니다.

이 이름을 이스케이프 처리합니까? 다른 테이블 이름을 사용하면 @Table (name = "otherName") 문제를 해결할 수 있습니까? 아니면 클래스 이름을 변경해야합니까?

답변

11

이 이름을 이스케이프 처리합니까?

제공 업체가하는 경우,이 특정 업체이다, 이렇게 말한다 JPA 스펙에 아무것도 없습니다.

다른 테이블 이름의 사용이

분명히 문제 @Table (이름 = "otherName")를 해결겠습니까, 그것은 (한 당신은 물론 다른 예약 된 키워드를 사용하지 않는 것처럼). 당신은 JPA 2.0 공급자를 사용하는 경우에, 탈출 따옴표로, DB를 객체 이름을 얻을 수있는 표준 방법이 : JPA 1.0에서

@Table(name="\"Group\"") 

, 그것은 당신의 JPA 공급자에 따라, 아무것도 표준이있다. 예를 들어, Hibernate는 역 따옴표 사용

@Table(name="`Group`") 

을 아니면 내가 클래스 이름을 변경해야합니까?

아니요 엔티티의 테이블 이름은 기본적으로 엔티티 이름으로 설정되어 있지만 여기에서 보았 듯이 @Table 특수 효과를 사용하여 제어 할 수 있습니다. 따라서 엔티티의 클래스 이름을 변경할 필요가 없습니다.

+2

따옴표를 사용하면 모든 조합 테이블 (예 : OneToMany 관계)이 작성되지 않습니다 ("그룹"_Members f.e.는 유효하지 않은 이름 임). 이 솔루션은 해킹이며 테이블에 예약 된 이름을 사용하지 않는 것이 좋습니다. 필드 이름은 문제를 덜어줍니다. – Steven

4

클래스의 이름을 변경할 필요가 없으며 선택한 이름이 가장 좋은 방법으로 도메인을 반영하므로 도구 나 프레임 워크의 제한 때문에 도구를 변경하면 안됩니다/framework는 "충돌"을 피할 수있는 방법을 제공합니다. JPA는 그러한 방법을 제공합니다.

+0

아니요, @Entity (name "foo")'의 이름 요소는 다른 것으로, JPQL 쿼리에 사용될 이름을 정의하는 데 사용됩니다. 그것은 데이터베이스 객체와 관련이 있습니다. –

+0

이 수정되었습니다. (15chr) – Bozho