有 Java 编程相关的问题?

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

同一实体中Hibernate中的java计算列

作为实体类学生,我在下面的实体类中有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;
    }

    }

我想执行一个NamedQuery,比如:

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

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


共 (1) 个答案

  1. # 1 楼答案

    你不需要打扰数据库,做一个getter:

    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加载实体后设置字段