Java ';基本';属性类型不应为优先级

Java ';基本';属性类型不应为优先级,java,hibernate,Java,Hibernate,下面的实体映射我想转换为优先级对象。在getter上,当我将“Short”改为“Priority”并使用this.Priority跟随suite时,它会抱怨'basic'属性类型不应该是Priority。如何设置/获取此优先级 @Column(name = "priority", nullable = false, insertable = true, updatable = true, length = 5, precision = 0) public Short getPriority()

下面的实体映射我想转换为
优先级
对象。在getter上,当我将“Short”改为“Priority”并使用
this.Priority跟随suite时,它会抱怨
'basic'属性类型不应该是Priority
。如何设置/获取此优先级

@Column(name = "priority", nullable = false, insertable = true, updatable = true, length = 5, precision = 0)
public Short getPriority() {
    return priority;
}

public void setPriority(Short priority) {
    this.priority = priority;
}
我的头等舱:

public class Priority {
    public static final Priority TOP = new Priority("TOP", 100);

    public static final Priority PRIORITY_REMAN = new Priority("PRIORITY_REMAN", 250);

    public static final Priority PRIORITY = new Priority("PRIORITY", 500);

    public static final Priority STANDARD_REMAN = new Priority("STANDARD_REMAN", 750);

    public static final Priority STANDARD = new Priority("STANDARD", 1000);

    private final String name;
    private final Integer value;

    public Priority() {
        this.name = null;
        this.value = 0;
    }

    protected Priority(String name, int value) {
        this.name = name;
        this.value = value;
    }

    public String getName() {
        return name;
    }

    @JsonView({Views.ShutdownView.class})
    public Integer getValue() {
        return value;
    }

    public String toString() {
        return getName();
    }
}

不能,Short是最后一个类,所以不能扩展它

我建议您做的是创建另一个您需要的getter,例如:

public Priority getJsonPriority() {
    return new Priority(this.priority);
}

或者将Priority.class设置为持久实体,并向其添加OneToOne关系,这对您来说不是最好的解决方案。

您可以将
Priority
类更改为
Enum
,还可以将
getPriority
方法更改为以下内容:

@Enumerated
@Column(name = "priority", nullable = false, insertable = true, updatable = true, length = 5, precision = 0)
public PriorityEnum getPriority() {
    return priority;
}
这样,hibernate将尝试将数据库中的
Priority
属性保存为一个数字,表示
Enumeration
定义中给定值的顺序。因此,如果
priority
属性的值为TOP,则数据库中相应的值为
1
,如果是
priority\u REMAN
,则数据库中的值为
2
,依此类推

要更改此行为,可以将
@Enumerated
注释更改为

@Enumerated(EnumType.STRING)


在这种情况下,数据库中相应的列应该是某种
String
(如
VARCHAR
NVARCHAR
),因为hibernate会尝试保存数据库中
TOP
PRIORITY\u REMAN
的字符串值。

如何在DB中定义该列?将其设为枚举并使用@Enumerated。或者创建自定义用户类型。