我正在使用Hibernate Criteria从filename我的表中的列获取值contaque_recording_log.
但是当我得到结果时,它会引发异常
org.hibernate.QueryException:无法解析属性:filename of:com.contaque.hibernateTableMappings.contaque_recording_log
我的表bean是:
import java.util.Date;
import javax.persistence.*;
@Entity
@Table(name="contaque_recording_log")
public class contaque_recording_log implements java.io.Serializable{
private static final long serialVersionUID = 1111222233334404L;
@Id
@Column(name="logId", insertable=true, updatable=true, unique=false)
private Integer logId;
@Column(name="userName", insertable=true, updatable=true, unique=false)
private String userName;
@Column(name="ext", insertable=true, updatable=true, unique=false)
private String ext;
@Column(name="phoneNumber", insertable=true, updatable=true, unique=false)
private String phoneNumber;
@Column(name="callerId", insertable=true, updatable=true, unique=false)
private String callerId;
@Column(name="fileName", insertable=true, updatable=true, unique=false)
private String fileName;
@Column(name="campName", insertable=true, updatable=true, unique=false)
private String campName;
@Temporal(javax.persistence.TemporalType.TIMESTAMP) …Run Code Online (Sandbox Code Playgroud) java hibernate hibernateexception hibernate-criteria oracle-sqldeveloper
我有一个Cat类和一个Owner类.一只猫有一个主人,但主人可以有很多猫.我想要查询的是让所有拥有蓝眼睛的猫的主人.
class Cat {
Owner owner; //referenced from Owner.id
String eyeColor;
}
class Owner {
List<Cat> catList;
}
Run Code Online (Sandbox Code Playgroud)
我尝试了一些代码,但我真的不知道该怎么做.
Criteria criteria = getCurrentSession().createCriteria(cat.getClass(), "cat");
criteria.createAlias("cat.owner", "owner");
criteria.add(Restrictions.eq("cat.eyeColor", "blue");
Run Code Online (Sandbox Code Playgroud) 使用Hibernate的Criteria,我想执行相当于:
select distinct uspscity, state from citycomplete where USPSCITY = 'HOUSTON'
Run Code Online (Sandbox Code Playgroud)
我认为做以下操作会产生我想要的结果:
ProjectionList projList = new ProjectionList();
projList.add(Projections.distinct(Projections.property("id.state")));
projList.add(Projections.distinct(Projections.property("id.uspsCity")));
criteria.setProjection(projList);
Run Code Online (Sandbox Code Playgroud)
但是,这实际上做的是执行类似的事情:
select distinct uspscity, distinct state from citycomplete where USPSCITY = 'HOUSTON'
Run Code Online (Sandbox Code Playgroud)
显然,这会引发错误.
除了不使用Criteria之外,还有解决方案吗?
谢谢,
布兰登
我需要发送一个查询来检索具有特定字符组的值,如下所示:
假设我对'XX'感兴趣,所以它应该搜索其值以'XX'开头或具有'XX'(空格XX)的任何字段.例如XXCDEF,PD XXRF并且CMKJIEK XX是有效的结果.
我有以下查询
返回正确的结果,但我需要以一种
方式对它们进行排序,它首先返回那些XX在开头然后返回其他结果.如下:
XXABCD
XXPLER
XXRFKF
AB XXAB
CD XXCD
ZZ XXOI
POLO XX
Run Code Online (Sandbox Code Playgroud)
码
Criteria criteria = session.createCriteria(Name.class, "name")
.add(Restrictions.disjunction()
.add(Restrictions.ilike("name.fname", fname + "%"))
.add(Restrictions.ilike("name.fname", "%" + " " + fname + "%"))
)
.setProjection(Projections.property("name.fname").as("fname"));
List<String> names = (List<String>) criteria.list();
Run Code Online (Sandbox Code Playgroud) 标准API中setResultTransformer方法的用途是什么?有人可以用一个简单的例子来解释这个吗 我读了javadocs,但我无法清楚地理解它们.
问候,
这个问题是跟进我之前的问题.我需要检索复杂类的列表.每个都有几个集合,只应检索其中的特定数量.我已经读完了这些问题的答案1,2,但他们没有解决我的问题.
我需要查找特定群组中位于特定位置的学生列表,以及他们在其地址中的电话号码.我还需要显示每个学生到特定坐标的距离.
以下代码工作正常,唯一的问题是我无法检索对象列表,例如电子邮件列表,组列表和每个学生的电话列表.
@Entity
public class Student implements java.io.Serializable {
private static final long serialVersionUID = -23949494858373847L;
@Id
@GeneratedValue
String id;
String name;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "student_groups", joinColumns = { @JoinColumn(name = "id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "groupId", nullable = false, updatable = false) })
Set<Group> groups = new HashSet<Group>(0);
..
}
@Entity
public class Address implements java.io.Serializable {
private static …Run Code Online (Sandbox Code Playgroud) 我有一个Person表,它有两列:first_name和last_name.Person类有两个相应的字段:firstName和lastName.现在我正在使用条件api并尝试基于连接的这两列创建订单.可能吗?或者它只能通过hql实现?
我需要转换Hibernate条件查询,如下所示
curList = session.createCriteria(Islem.class)
.createAlias("workingDay", "d")
.setProjection(Projections.sum("amount"))
.add(Restrictions.eq("currency", CURRENCY))
.add(Restrictions.eq("product", product))
.add(Restrictions.ne("status", INACTIVE))
.add(Restrictions.eq("d.status", ACTIVE))
.getResultList();
Run Code Online (Sandbox Code Playgroud)
然而在JPA(2)中,我不知道如何实现投影 - 在这种情况下 - 总和.奇怪的是,Hibernate和JPA(甚至是Hibernate JPA 2)在标准查询中存在巨大差异.
我开始
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Islem> cq = cb.createQuery(Islem.class);
Root<Islem> isr = cq.from(Islem.class);
cq.select(isr).where(cb.equal(isr.get("currency"), CURRENCY),
cb.notEqual(isr.get("status"), INACTIVE),
cb.equal(isr.get("product"), product));
Run Code Online (Sandbox Code Playgroud)
但是不知道如何在这里实现投影既不是别名
hibernate projection criteria-api hibernate-criteria jpa-2.0
除了更少的代码之外,使用Hibernate Criteria API构建IN子句的以下两种方法之间的区别是什么?是否存在性能问题?我缺少的检索中是否有一些逻辑?就返回的行而言,它们似乎都执行相同的操作.
Disjunction disj = Restrictions.disjunction();
for (String value : stringArray) {
disj.add(Restrictions.eq("code", value));
}
where.add(disj);
Run Code Online (Sandbox Code Playgroud)
VS.
Restrictions.in("code", stringArray);
Run Code Online (Sandbox Code Playgroud)
我问的原因是因为我在前者存在的情况下重构遗留代码,但我期待后者.如果它们都是相同的,我将单独保留遗留代码.
我已经使用以下代码实现了分页:
public Paginacao<Anuncio> consultarPaginado(int pagina, Integer cidadeId) {
Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Anuncio.class);
criteria.add(Restrictions.eq("ativo", true));
criteria.add(Restrictions.eq("statusLiberacao", AnunciosUtil.STATUS_ANUNCIO_LIBERADO));
criteria.add(Restrictions.eq("statusVendaAnuncio", AnunciosUtil.STATUS_VENDA_ANUNCIO_DISPONIVEL));
if (cidadeId != null) {
criteria.add(Restrictions.eq("cidade.id", cidadeId));
}
criteria.addOrder(Order.desc("dataPostagem"));
criteria.setProjection(Projections.rowCount());
Long count = (Long) criteria.uniqueResult();
Paginacao<Anuncio> paginacao = new Paginacao<Anuncio>();
int qtdPaginas = (count.intValue() / 7) + 1;
paginacao.setQtdPaginas(qtdPaginas);
criteria.setProjection(null);// reseta a criteria sem a projeção
criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
if (pagina > qtdPaginas) {
pagina = qtdPaginas;
}
pagina = pagina - 1;
criteria.setFirstResult(pagina * ConstantesGenericas.MAXIMO_OBJETOS_RETORNADOS);
criteria.setMaxResults(ConstantesGenericas.MAXIMO_OBJETOS_RETORNADOS);
paginacao.setRegistros(criteria.list());
return paginacao;
}
Run Code Online (Sandbox Code Playgroud)
当我手动构建SQL查询并将其提交到数据库时,我得到8个结果.但是,当我尝试上面的代码时,在将ResultTransformer设置为DISTINCT_ROOT_ENTITY之前,获得8个结果(没有区别),并在设置之后得到4个结果.但是我应该得到8个结果(使用DISTINCT),因为当我手动构建SQL而没有不同时,我得到11个结果,当我使用DISTINCT时,我得到了正确的结果.
上面的代码有什么问题?
hibernate ×10
java ×4
criteria ×2
criteria-api ×1
distinct ×1
hql ×1
jpa-2.0 ×1
projection ×1
restrictions ×1
sql ×1