Hibernate中的计算列在同一个实体中

时间:2017-11-07 05:17:14

标签: java hibernate hibernate-annotations

我有实体班学生,因为我有roll_nostudent_namemarks列我的实体类如下:

    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;


    @Entity
    @Table(name = "student")
    public class Student{

    @Id 
    private int roll_no;
    private String student_name;
    private int marks; 

    public int getRoll_no() {
            return roll_no;
        }

        public void setRoll_no(int levelid) {
            this.roll_no = roll_no;
        }

public String getStudent_name() {
        return student_name;
    }

    public void setStudent_name(String student_name) {
        this.student_name = student_name;
    }


public int getMarks() {
        return marks;
    }

    public void setMarks(int marks) {
        this.marks= marks;
    }

    }

我想执行A NamedQuery Like:

select *, (case when marks > 35  then 'Pass' else 'Fail' end)  as final_result from student

如何在实体类中添加计算的新列final_result。 我不想将它添加到我在DB中的实际表中 感谢

1 个答案:

答案 0 :(得分:0)

你不需要打扰数据库,做一个吸气剂:

public String getFinalResult() {
    return this.marks > 35 ? "Pass" : "Fail";
}

编辑:

如果您需要将finalResult作为json解析器的字段,请尝试以下方法:

@Transient
@JsonProperty(access = Access.READ_ONLY)
private String finalResult;

private int marks;

public void setMarks(int marks) {
    this.marks = marks;
    setFinalResult();
}

private String getFinalResult() {
    return this.finalResult;
}

@PostLoad
private void setFinalResult() {
    this.finalResult = this.marks > 35 ? "Pass" : "Fail";
}

@Transient注释会阻止字段持久化,@PostLoad确保在从jpa加载实体后设置字段。