以下实体映射我想要转换为Priority
对象。在getter上,当我将“Short”更改为“Priority”并使用this.priority
关注套件时,它会抱怨'basic' attribute type should not be 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();
}
}
答案 0 :(得分:1)
您可以将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_REMAN
,则数据库中的值将为2
等等。
要更改此行为,您可以将@Enumerated
注释更改为
@Enumerated(EnumType.STRING)
在这种情况下,数据库中的相应列应该是某种String
(如VARCHAR
或NVARCHAR
),因为hibernate会尝试保存{{1}的字符串值数据库中的{}或TOP
。
答案 1 :(得分:0)
你不能,Short是最后一堂课,所以你不能扩展它。
我建议你做的是创建你需要的另一个吸气剂,例如:
public Priority getJsonPriority() {
return new Priority(this.priority);
}
或将Priority.class作为持久实体,并为其添加OneToOne关系,这不是最佳解决方案..