2016-10-08 2 views
0
  • 오래된 학교 최대 절전 모드 - ManyToOne 게으른
  • JPA이었다 - ManyToOne 모두 OneToMany에서

열망 게으른 신에게 감사합니다.JPA @ManyToOne 최대 절전 모드에 대한

이 아주 나쁜 설정을 무시하려면 최대 절전 모드 설정이 있습니까? 많은 사람들이 ManyToOnes를 계속해서 게으르지 않고 (예 : FetchType.LAZY를 추가하는 것을 잊어 버림) 많은 수의 사람들이 불필요한 조인을 초래하고 일부 경우에는 필요하지 않은 6 개의 테이블이 결합되는 경우가 있습니다.

개발자가 열심히 뭔가를 가져 오기 위해 JQL로 이동하지 않는 한 모든 것이 실제로 게으른 것이 좋습니다. 그런 다음 ManyToOne 주석을 추가 할 때마다 개발자가 이러한 실수를하지 않도록하는 데 도움이됩니다.

또는 최대 절전 모드 5.2에서 여전히 최대 절전 모드 주석을 대신 사용할 수 있습니까? 하지만 우연히 우연히 우리에게 돌아 오지 않을 까봐 걱정 스럽기 때문에 클래스 패스에서 JPA 주석을 제거해야합니다.

나는 그것을 모든 https://vladmihalcea.com/eager-fetching-is-a-code-smell/

감사 딘 아니라 게으른 방법에 내가 가진 것보다 더 좋은 설명이 위대한 기사를 발견

답변

2

최대 절전 모드 (또는 다른 프레임 워크) 설정 같은 값에서 주석 속성의 기본을 구별하는 것은 불가능하다.

나는 런타임이 @ManyToOne@ManyToOne(fetch = FetchType.EAGER)가 정확히 동일하다는 것을 의미합니다.

하지만 런타임 동작을 변경할 수 없습니다, 당신은 적어도 컴파일 시간을 조정할 수있다 : 당신은 당신의 동료는 항상 명시 적으로 입력 인출 설정하는 데 적용하는 Checkstyle 규칙 (또는 유사한 무엇이든)를 추가 할 수 있습니다. Checkstyle에 대한

예 : 가져올 경우, 컴파일 시간 경고를 추가

<module name="RegexpSinglelineJava"> 
    <property name="format" value="@(One|Many)ToOne(?!\([^)]*fetch)"/> 
    <property name="message" value="Please declare the fetch type (and use EAGER sparingly)"/> 
    <property name="ignoreComments" value="true"/> 
</module> 

@OneToOne 또는 @ManyToOne 후 정의되지 않았습니다.

1
세계적으로 기본값을 대체 할 수있는 방법이 없습니다

,하지만 당신은 할 수 소스 코드를 가져 와서 변경하고 컴파일하십시오.

https://github.com/eclipse/javax.persistence/blob/master/src/javax/persistence/ManyToOne.java

라인 (111)

FetchType fetch() default EAGER; 
+0

적어도 JEE 응용 프로그램 서버 (다른 응용 프로그램 포함)의 경우에는 수행 할 수없는 작업입니다. 그래서 저는 여기서 _always_라는 단어에 대해 신중할 것입니다. –

관련 문제