2009-10-01 3 views
1

을 감안할 때이 최대 절전 모드 최종한다면 객체 생성을 감소 그 쿼리가 정적

@org.hibernate.annotations.NamedQueries({ 
    @org.hibernate.annotations.NamedQuery(
     name = "ASSIGNED_CONTINGENCIES", 
     query = "select ctg.id from Cont ctg join ctg.labels cl where cl.id = :label_id and ctg.datasetId = tscommon.rdsidtodsid(:datasetting_id)...." 
    ) 
}) 

그것이 내가 이것을 실행이 매번 뜻 니펫을할지 여부는되는 "쿼리"문자열 매번 작성되었거나 이것이 문자열 수감의 경우입니까? final static String QUERY에서 검색어를 사용하고 @NamedQuery에서 사용하는 것이 도움이 되나요? "이름"에 대해서도 같은 것이 유효할까요?

답변

1

String은 String 리터럴이므로 클래스가로드 될 때 항상 인턴 될 것입니다.

+0

1. OP가 언급 한 것처럼 "쿼리가 실행 됨"이 아니라 "클래스가로드 됨"에 중점을 둡니다. – ChssPly76

+0

그래서 저는 그것이 억류의 한 사례라고 생각합니다. 정적 최종 결과에 배정 할 이유가 없습니다. 감사합니다. –

1

에는 성능이나 메모리 효과가 없다, 그러나이 예에서와 같이, 인쇄상의 오류를 방지하기 위해 쿼리 이름에 대한 상수를 사용하는 것이 유용 할 수 있습니다 :

// Entity class 
@NamedQueries({@NamedQuery(name=MyBean.FIND_BY_ID, query="select o from MyBean o where o.id = :id")}) 
public class MyBean { 
    public static final String FIND_BY_ID = "MyBean.findById"; 
} 

// Controller/Service/Factory/whatever 
em.createNamedQuery(MyBean.FIND_BY_ID).setParameter("id", id).getSingleResult(); 
+0

이것은 정직하기에 과장된 것처럼 보입니다. 쿼리 이름을 잘못 입력하면로드하려고 할 때 예외가 발생합니다. – ChssPly76

+0

언제든지 RuntimeException에 대한 컴파일러 오류를 선호합니다. 또한 쿼리 이름을 리팩토링하고 IDE에서 사용법/사용되지 않는 쿼리를 쉽게 찾을 수 있습니다. –

관련 문제