我一直在读一些水壶,但我仍然感到困惑.为什么?因为你提到的差异与绩效无关.它们与易用性有关.(Objetc(标准)和SQL(hql)).但我想知道"条件"是否因某种原因比hql慢.
我在另一个回答中读到了这个
"HQL和criteriaQuery之间的性能存在差异,每次使用criteriaQuery触发查询时,它都会为表名创建一个新别名,这不会反映在任何数据库的最后一个查询缓存中.这会导致开销编译生成的SQL,花费更多时间来执行." 作者:Varun Mehta.
这非常接近但是!我在另一个网站上阅读(http://gary-rowe.com/agilestack/tag/hibernate/)Hibernate 3.3及以上版本不再是这种情况(请阅读:9)Hibernate很慢,因为SQL生成的Criteria接口不一致)
我已经做了一些测试试图找出差异,但两者都生成qry并且它不会更改表的别名.
我很困惑.如果有人知道主要原因,请帮助我们.谢谢
我如何使用Hibernate Restrictions实现这一目标?
(((A='X') and (B in('X',Y))) or ((A='Y') and (B='Z')))
Run Code Online (Sandbox Code Playgroud) 我一直在JPA 1.0(Hibernate驱动程序)中使用Hibernate Restrictions.定义了Restrictions.ilike("column","keyword", MatchMode.ANYWHERE)哪些测试关键字是否匹配列的任何位置,并且它不区分大小写.
现在,我使用JPA 2.0和EclipseLink作为驱动程序,因此我必须使用"Restrictions"内置JPA 2.0.我发现CriteriaBuilder和方法like,我也发现了如何使它匹配任何地方(尽管它是令人讨厌和手动),但我仍然没有想出如何做它不区分大小写.
我目前有一个很好的解决方案:
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<User> query = builder.createQuery(User.class);
EntityType<User> type = em.getMetamodel().entity(User.class);
Root<User> root = query.from(User.class);
// Where
// important passage of code for question
query.where(builder.or(builder.like(root.get(type.getDeclaredSingularAttribute("username", String.class)), "%" + keyword + "%"),
builder.like(root.get(type.getDeclaredSingularAttribute("firstname", String.class)), "%" + keyword + "%"),
builder.like(root.get(type.getDeclaredSingularAttribute("lastname", String.class)), "%" + keyword + "%")
));
// Order By
query.orderBy(builder.asc(root.get("lastname")),
builder.asc(root.get("firstname")));
// Execute
return em.createQuery(query).
setMaxResults(PAGE_SIZE + 1).
setFirstResult((page - 1) * PAGE_SIZE).
getResultList();
Run Code Online (Sandbox Code Playgroud)
问题: …
我在我的代码中使用Criteria Query.它总是火上浇油select * from ...
相反,我想从我的查询中忽略一个列(字段),因为该字段有大量以字节存储的数据.而这导致了性能问题.
任何人都可以为此提出想法吗?
一些更新
我在查询中添加了一个投影,它创建了一个像...的查询
select
this_.TEMPLATE_ID as y0_,
this_.TEMPLATE_NAME as y1_,
this_.CREATE_DATE as y2_,
this_.UPDATE_DATE as y3_,
this_.STATUS_CODE as y4_,
this_.USER_ID as y5_,
this_.UPDATED_BY as y6_,
this_.CATEGORY_ID as y7_,
this_.PRACTICE_ID as y8_
from
templates this_
inner join
user user1_
on this_.USER_ID=user1_.USER_ID
inner join
template_categories category2_
on this_.CATEGORY_ID=category2_.CATEGORY_ID
where
y4_=?
and y8_=?
and y5_ in (
?, ?
)
order by
y1_ asc limit ?
Run Code Online (Sandbox Code Playgroud)
现在问题就像.. Unknown column 'y4_' in 'where clause'
和y8_相同的错误,y5_意味着所有关闭它给出错误的地方.
我修改它像查询...
select …Run Code Online (Sandbox Code Playgroud) 我对Hibernate的预测和标准有点困惑.何时使用预测以及何时使用标准?
请帮我.谢谢!
我对Hibernate很新.我发现我们可以使用以下两种不同的方式获得不同的结果.谁能告诉我他们之间有什么区别?何时使用其他?
Projections.distinct(Projections.property("id"));
Run Code Online (Sandbox Code Playgroud)
VS
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
Run Code Online (Sandbox Code Playgroud) 我想用Hibernate Criteria实现以下SQL查询:
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name <operator> value
GROUP BY column_name
Run Code Online (Sandbox Code Playgroud)
我试图用Hibernate Criteria来实现它,但它没有成功.
谁能给我一个例子,说明如何使用Hibernate Criteria?谢谢!
我想使用Hibernate选择单个列而不是整个对象.到目前为止我有这个:
List<String> firstname = null;
firstname = getSession().createCriteria(People.class).list();
Run Code Online (Sandbox Code Playgroud)
我的问题是上面的代码将整个People表作为对象返回,而不仅仅是"firstname".我不知道如何指定只返回"firstname"而不是整个对象.
我正在使用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
hibernate ×9
java ×6
criteria ×3
hql ×2
mysql ×2
distinct ×1
eclipselink ×1
jpa-2.0 ×1
nhibernate ×1
performance ×1
restrictions ×1
sql ×1