sourcecode

JavaBeanExecutable HV000254에 Java Enum에 대한 매개 변수 메타데이터가 없습니다.

copyscript 2023. 10. 31. 22:32
반응형

JavaBeanExecutable HV000254에 Java Enum에 대한 매개 변수 메타데이터가 없습니다.

스프링 부트 응용 프로그램을 1.5에서 2.3.5로 업그레이드했습니다(스프링 부트 그라들 플러그인 사용).스프링 부트 응용 프로그램이 시작되면 다음 경고가 4번 표시됩니다.

2020-11-05 13:29:19.432 WARN 3931 --- [nio-8080-exec-4] o.h.v.i.p.javabean.Java Bean 실행 파일: HV000254:암시적 또는 합성 매개 변수를 선언하는 FacetField(String, int, String, String, String, int, Class)에 대한 매개 변수 메타데이터가 없습니다.메서드 매개 변수에 대한 일반 유형 정보를 자동으로 확인하면 여러 매개 변수의 소거가 동일한 경우 잘못된 결과가 나올 수 있습니다.이를 해결하려면 '-parameters' 플래그로 코드를 컴파일합니다.

My FacetField 열거는 다음과 같습니다.

public enum FacetField {

    CONST_1("KEY", "ESFIELD", "RESOURCEKEY"),
    CONST_2("KEY", "ESFIELD", "RESOURCEKEY"),
    CONST_3("KEY", "ESFIELD", ""),

    CONST_4("KEY", "ESFIELD", "ESMAXFIELD", "RESOURCEKEY", Hours.class),
    CONST_5("KEY", "ESFIELD", "RESOURCEKEY", Experience.class),
    CONST_6("KEY", "ESFIELD", "", Distance.class);

    private String key;
    private String esField;
    private String esMaxField;
    private String resourcekey;
    private Class<? extends RangeFacet> rangeFacet;

    FacetField(final String key, final String esField, final String resourcekey) {
        this.key = key;
        this.esField = esField;
        this.resourcekey = resourcekey;
        this.rangeFacet = null;
    }

    FacetField(final String key, final String esField, final String resourcekey, final Class<? extends RangeFacet> rangeFacet) {
        this.key = key;
        this.esField = esField;
        this.resourcekey = resourcekey;
        this.rangeFacet = rangeFacet;
    }

    FacetField(final String key, final String esMinField, final String esMaxField, final String resourcekey, final Class<? extends RangeFacet> rangeFacet) {
        this.key = key;
        this.esField = esMinField;
        this.esMaxField = esMaxField;
        this.resourcekey = resourcekey;
        this.rangeFacet = rangeFacet;
    }


    public String getKey() {
        return key;
    }

    public String getEsField(final FieldProperty fieldProperty) {
        return esField + fieldProperty.getEsFieldProperty();
    }

    public String getEsMinField() {
        return esField;
    }

    public String getEsMaxField() {
        return esMaxField;
    }

    public String getResourcekey() {
        return resourcekey;
    }

    public enum Distance implements RangeFacet {

        FROM_0_TO_5(0d, 5d, "5"),
        FROM_0_TO_10(0d, 10d, "10"),
        FROM_0_TO_20(0d, 20d, "20"),
        FROM_0_TO_30(0d, 30d, "30"),
        FROM_0_TO_50(0d, 50d, "50");

        private final Double min;
        private final Double max;
        private final String selectableDescription;

        Distance(final Double min, final Double max, final String selectableDescription) {
            this.min = min;
            this.max = max;
            this.selectableDescription = selectableDescription;
        }

        @Override
        public Double getMin() {
            return this.min;
        }

        @Override
        public Double getMax() {
            return this.max;
        }

        @Override
        public String getSelectableDescription() {
            return this.selectableDescription;
        }
    }

    public enum Experience implements RangeFacet {

        TO_1(0d, 1d, "1"),
        FROM_1_TO_2(1d, 2d, "2"),
        FROM_2_TO_5(2d, 5d, "5"),
        FROM_5_TO_10(5d, 10d, "10"),
        FROM_10(10d, null, "10+");

        private final Double min;
        private final Double max;
        private final String selectableDescription;

        Experience(final Double min, final Double max, final String selectableDescription) {
            this.min = min;
            this.max = max;
            this.selectableDescription = selectableDescription;
        }

        @Override
        public Double getMin() {
            return this.min;
        }

        @Override
        public Double getMax() {
            return this.max;
        }

        @Override
        public String getSelectableDescription() {
            return this.selectableDescription;
        }
    }

    public enum Hours implements RangeFacet {

        FROM_0_TO_8(0d, 8d, "8"),
        FROM_9_TO_16(9d, 16d, "16"),
        FROM_17_TO_24(17d, 24d, "24"),
        FROM_25_TO_32(25d, 32d, "32"),
        FROM_33_TO_36(33d, 36d, "36"),
        FROM_37(37d, null, "40");

        private final Double min;
        private final Double max;
        private final String selectableDescription;
        
        Hours(final Double min, final Double max, final String selectableDescription) {
            this.min = min;
            this.max = max;
            this.selectableDescription = selectableDescription;
        }

        @Override
        public Double getMin() {
            return this.min;
        }

        @Override
        public Double getMax() {
            return this.max;
        }

        @Override
        public String getSelectableDescription() {
            return this.selectableDescription;
        }
    }

}

제가 이것과 관련된 것을 찾을 수 있는 유일한 것은 github: https://github.com/oracle/graal/issues/1941 에서 이 graal 문제입니다.

누가 설명해 줄 수 있습니까?

spring-boot-parent깃발을 가지고 있었습니다.maven-compiler-plugin2.2.x 버전까지.

당신이 직접 깃발을 추가해야 할 것입니다.maven-compiler-plugin:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <parameters>true</parameters>
            </configuration>
        </plugin>
    </plugins>
</build>

다른 대답은 경고를 제거하는 방법을 설명합니다.-paramaters만국의 국기Spring Boot 2를 사용하면 더 이상 그렇게 필요가 없습니다(Maven과 Gradle 둘 다 사용하지 않음).

열거 상수에 대한 경고가 계속 표시되는 경우, 이는 Hibernate Validator의 버그로 보입니다.

언급URL : https://stackoverflow.com/questions/64699000/javabeanexecutable-hv000254-missing-parameter-metadata-for-java-enum

반응형