【问题标题】:criteria - select by getter标准 - 按 getter 选择
【发布时间】:2016-04-22 13:23:21
【问题描述】:

我有一个接口来获取名称可以不同的列的值。

public interface IInterface {

    Integer getValue();
}

class A implements IInterface{
    private Integer someValue;

    public Integer getValue(){
        return someValue;
    }
}

class B implements IInterface{
    private Integer valueAlias;

    public Integer getValue(){
        return valueAlias;
    }
}

在一个抽象类中,我想选择具有最高值的实体,但我没有明确的列名。 有没有可能解决这个问题?

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<IInterface> cq = cb.createQuery(IInterface.class);
Root<IInterface> root = cq.from(IInterface.class);
cq.select(cb.max(/* getValue() */));

【问题讨论】:

    标签: java hibernate interface criteria


    【解决方案1】:

    每个实体(或表)都需要自己的实现,但您当然可以让它们都实现相同的接口。

    使用您的CriteriaBuilder,您需要使用实现类分别查询每个实体。像您在原始问题中所做的那样引用界面将不起作用。

    @Entity
    @Table(name = "TABLE_A")
    class A implements IInterface, Serializable {
    
        @Column(name = "SOME_COL")
        private Integer someValue;
    
        public Integer getValue(){
            return someValue;
        }
    }
    
    @Entity
    @Table(name = "TABLE_B")
    class B implements IInterface, Serializable {
    
        @Column(name = "SOME_OTHER_COL")
        private Integer valueAlias;
    
        public Integer getValue(){
            return valueAlias;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-06
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多