Java 函数结果作为类字段值

Java 函数结果作为类字段值,java,hibernate,postgresql,Java,Hibernate,Postgresql,我有PostgreSQL数据库,其中有一个函数month\u traffic() 是否可以将postgresql函数的结果设置为monthMBytes的字段值 // month traffic @Formula("(select month_traffic(hst_pcode)") private transient float monthMBytes = 0; 致以最良好的祝愿。我阅读了相关的SO问题、一些文档和 我需要使磁场非瞬态 我不需要场地设置员。只有getter enought 在@

我有PostgreSQL数据库,其中有一个函数
month\u traffic()

是否可以将postgresql函数的结果设置为monthMBytes的字段值

// month traffic
@Formula("(select month_traffic(hst_pcode)")
private transient float monthMBytes = 0;

致以最良好的祝愿。

我阅读了相关的SO问题、一些文档和

  • 我需要使磁场非瞬态
  • 我不需要场地设置员。只有getter enought
  • 在@Formula注释中,我编写了从函数中选择值的sql查询
  • PostgreSQL函数必须返回非空值
  • 所以,我的新功能是

    CREATE OR REPLACE FUNCTION month_traffic(hostcode int) RETURNS numeric(14,2) AS $$
    DECLARE
      begin_date date := CAST((EXTRACT(year FROM now()) || '-' || EXTRACT(month FROM now()) || '-' || '01') AS date);
      end_date date := CAST((EXTRACT(year FROM now()) || '-' || EXTRACT(month FROM now()) + 1 || '-' || '01') AS date);
      result numeric(14,2) := 0;
    BEGIN
      result := (SELECT SUM(day_mbytes) FROM daily 
        WHERE (day_hstcode = hostcode) AND (day_date >= begin_date) AND (day_date < end_date));
      IF (result IS NULL) THEN
        result := 0;
      END IF;
      RETURN result;
    END;
    $$ LANGUAGE plpgsql
    

    现在一切正常。谢谢您的链接和评论。

    谢谢您的链接。我读了之后感到困惑——在
    @formula
    注释中是HQL还是原生SQL。我所需要的就是去尝试。
    // month traffic
    @Formula("(select month_traffic(hst_pcode)")
    private transient float monthMBytes = 0;
    
    CREATE OR REPLACE FUNCTION month_traffic(hostcode int) RETURNS numeric(14,2) AS $$
    DECLARE
      begin_date date := CAST((EXTRACT(year FROM now()) || '-' || EXTRACT(month FROM now()) || '-' || '01') AS date);
      end_date date := CAST((EXTRACT(year FROM now()) || '-' || EXTRACT(month FROM now()) + 1 || '-' || '01') AS date);
      result numeric(14,2) := 0;
    BEGIN
      result := (SELECT SUM(day_mbytes) FROM daily 
        WHERE (day_hstcode = hostcode) AND (day_date >= begin_date) AND (day_date < end_date));
      IF (result IS NULL) THEN
        result := 0;
      END IF;
      RETURN result;
    END;
    $$ LANGUAGE plpgsql
    
      . . .
      @Formula("(select month_traffic(hst_pcode))")
      private float monthMBytes;
    
      public float getMonthMBytes() {
        return monthMBytes;
      }
      . . .