有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java@DiscriminatorValue类型不匹配:无法从整数转换为字符串

虽然我将父类定义为使用Integer类型的鉴别器列,但编译器始终为使用Integer鉴别器值的子类提供错误:Type mismatch: cannot convert from Integer to String

@Table(name="ITEMS")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="ITEM_CATEGORY",discriminatorType=DiscriminatorType.INTEGER)
public class Item { ....}


@Entity
@DiscriminatorValue(value=ItemCategory.Values.LEARNING_DUTY)
public class LearningDuty extends Item {...}


public static class Values {
        
        public static final Integer LEARNING_DUTY = 3;

    }

pom文件:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring.version>5.0.2.RELEASE</spring.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>

我尝试清理项目并重建,重新启动IDE,但问题仍然存在 我用的是STS4

enter image description here


共 (1) 个答案

  1. # 1 楼答案

    Java是一种静态类型语言。因此discriminatorType=DiscriminatorType.INTEGER无法更改DiscriminatorValuevalue的类型

    It's explained e.g. here

    The DiscriminatorValue annotation specifies the discriminator value for each class. Though this annotation's value is always a string, the implementation will parse it according to the DiscriminatorColumn's discriminatorType property above.

    因此,必须按如下方式指定鉴别器值:

    @DiscriminatorValue(value=""+ItemCategory.Values.LEARNING_DUTY)