java - 标准 - 通过 getter 选择

标签 java hibernate interface criteria

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

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

最佳答案

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

使用您的CriteriaBuilder,您将需要使用实现类单独查询每个实体。像您在原始问题中所做的那样引用接口(interface)是行不通的。

@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;
    }
}

关于java - 标准 - 通过 getter 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36795077/

相关文章:

unit-testing - golang 中用于模拟第三方库的接口(interface)

java - Liferay IDE portlet 更改未在服务器上同步

dictionary - 无法访问 [] 接口(interface)内 map 中的键

java - Jersey : Injecting of shared object not working with Jetty

Hibernate 类型和 JBoss 兼容性问题

java - 如何处理 org.hibernate.exception.ConstraintViolationException,我使用 try catch 不起作用

java - 将 JsonElement 保留到单个表列中

dart - Dart 源码中接口(interface)内部是如何工作的

java - 有人能解释一下这个正则表达式吗?

java - Spring Security tokenRepository CSRF 设置 p :cookieHttpOnly ="false" getting error