我有一个接口(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/