gpt4 book ai didi

JPA条件查询加载整个表

转载 作者:行者123 更新时间:2023-12-04 13:01:59 25 4
gpt4 key购买 nike

我觉得这是一个愚蠢的问题,但我找不到答案。我的课如下:

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name="DEMO_VARIABLES")
public class Variable implements Serializable
{
private static final long serialVersionUID = -1734898766626582592L;

@Id
@SequenceGenerator(name="VARIABLE_ID_GENERATOR", sequenceName="DEMO_VARIABLE_ID_SEQ", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="VARIABLE_ID_GENERATOR")
@Column(name="VARIABLE_ID", unique=true, nullable=false, precision=22)
private long variableId;

@Column(name="VARIABLE_NAME", nullable=false, length=50)
private String variableName;

@Column(name="VARIABLE_VALUE", nullable=false, length=500)
private String variableValue;

public Variable()
{

}

public long getVariableId()
{
return variableId;
}

public void setVariableId(long variableId)
{
this.variableId = variableId;
}

public String getVariableName()
{
return variableName;
}

public void setVariableName(String variableName)
{
this.variableName = variableName;
}

public String getVariableValue()
{
return variableValue;
}

public void setVariableValue(String variableValue)
{
this.variableValue = variableValue;
}
}

现在,我想使用条件查询来加载整个表(即“从变量中选择*”)。我想更多地使用条件查询来确保代码的一致性,而不是其他任何事情。我得到这个异常:
java.lang.IllegalStateException: No criteria query roots were specified
at org.hibernate.ejb.criteria.CriteriaQueryImpl.validate(CriteriaQueryImpl.java:303)
at org.hibernate.ejb.criteria.CriteriaQueryCompiler.compile(CriteriaQueryCompiler.java:145)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:437

我正在使用的查询是:
public List<Variable> loadAllVariables()
{
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Variable> query = builder.createQuery(Variable.class);

return em.createQuery(query).getResultList();
}

我知道异常意味着它想要这样:
Root<Variable> variableRoot = query.from(Variable.class);

但是没有谓词,我看不到如何将Root对象放入查询中?

最佳答案

我不确定,我是否理解正确,但是如果目标是选择所有Variable实体的获取列表,那么可以采取以下方法:

public List<Variable> loadAllVariables() {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Variable> query = builder.createQuery(Variable.class);
Root<Variable> variableRoot = query.from(Variable.class);
query.select(variableRoot);

return em.createQuery(query).getResultList();
}

区别在于使用了select。所有实现都不会隐式地使用from的最后一次调用代替select。在JPA 2.0规范中,这被告知如下:

Portable applications should use the select or multiselect method to specify the query’s selection list. Applications that do not use one of these methods will not be portable.

关于JPA条件查询加载整个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11669868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com