标准 - 按getter选择

时间:2016-04-22 13:23:21

标签: java hibernate interface criteria

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

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() */));

1 个答案:

答案 0 :(得分:0)

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

使用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;
    }
}