Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate4.1是否仍然支持@Formula注释?_Hibernate_Formula - Fatal编程技术网

Hibernate4.1是否仍然支持@Formula注释?

Hibernate4.1是否仍然支持@Formula注释?,hibernate,formula,Hibernate,Formula,我试图在我的一个Hibernate4.1实体类中使用@Formula注释。从一些文章中,我了解到这个注释需要放在属性定义上,我也是这样做的。但什么也没发生。无论公式内容有多简单,Hibernate都会一直将属性直接放入生成的sql中,然后抛出一个“无效标识符”异常,因为显然在物理表中没有具有该名称的对应列 关于如何使用@Formula,我只能找到一些文档,但没有一篇文档提到它在Hibernate4中是否仍然受支持。那么这个问题有确定的答案吗?我有可能以这样或那样的方式使用这个注释吗 新增内容:

我试图在我的一个Hibernate4.1实体类中使用@Formula注释。从一些文章中,我了解到这个注释需要放在属性定义上,我也是这样做的。但什么也没发生。无论公式内容有多简单,Hibernate都会一直将属性直接放入生成的sql中,然后抛出一个“无效标识符”异常,因为显然在物理表中没有具有该名称的对应列

关于如何使用@Formula,我只能找到一些文档,但没有一篇文档提到它在Hibernate4中是否仍然受支持。那么这个问题有确定的答案吗?我有可能以这样或那样的方式使用这个注释吗

新增内容: 以下是示例代码:

package sample.model;

import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Formula;


@Entity
@Table(name = "STAGE_TRACK", schema = "")
public class StageTrack implements java.io.Serializable {

    // Fields

    private BigDecimal id;
    private Date startTime;
    private Date endTime;

    @Formula("(END_TIME - START_TIME)*24*60")
    private BigDecimal duration;
    public BigDecimal getDuration() {
        return this.duration;

    }
    public void setDuration(BigDecimal duration) {
        this.duration = duration;
    }

    // Constructors
    /** default constructor */
    public StageTrack() {
    }

    /** minimal constructor */
    public StageTrack(BigDecimal id) {
        this.id = id;
    }

    /** full constructor */
    public StageTrack(BigDecimal id, Date startTime, Date endTime) {
        this.id = id;
        this.startTime = startTime;
        this.endTime = endTime;
    }

    // Property accessors
    @Id
    @Column(name = "ID", unique = true, nullable = false, precision = 22, scale = 0)
    public BigDecimal getId() {
        return this.id;
    }

    public void setId(BigDecimal id) {
        this.id = id;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "START_TIME", length = 7)
    public Date getStartTime() {
        return this.startTime;
    }

    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "END_TIME", length = 7)
    public Date getEndTime() {
        return this.endTime;
    }

    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }

}

您的问题是将
@Formula
放在字段上,而其他注释放在getter上,因此忽略
@Formula

您应该选择一种策略并一致地应用它(除非您使用
@AccessType
明确地覆盖它)


谢谢你,伙计。这正是我的问题所在!猜测“@公式必须放在属性定义上”是错误信息;)
@Formula("(END_TIME - START_TIME)*24*60")
public BigDecimal getDuration() {
    return this.duration;

}