我正在从Hibernate 3.x升级到最新的Hibernate 5.2.0 FINAL。在我的旧代码中,我们使用了如下的条件查询。
Session session =getHibernateTemplate().getSessionFactory().getCurrentSession();
Criteria criteria = session.createCriteria(Employee.class);
criteria.add(Restrictions.eq("Department", department));
return criteria.list();
现在,从HiberNate 5.2.0开始,createCrit的()方法已经被弃用了,可以从下面的留档中找到。
https://docs . JBoss . org/hibernate/ORM/5.2/javadocs/deprecated-list . html https://docs . JBoss . org/hibernate/ORM/5.2/javadocs/org/hibernate/sharedsessioncontract . html # create criteria-Java . lang . class-
文档建议使用JPA标准。以下是我基于上述背景提出的几个问题。
>
由于我们没有使用EntityManager并且严重依赖HibernateDAO的支持和Hibernate模板,我如何使用会话或会话工厂使用JAP标准?
如果我在下面的代码片段中使用DetachedCriteria,它会和以前的实现一样吗?或者下面的代码会给出与会话无关的结果吗?
DetachedCriteria criteria = DetachedCriteria.forClass(Employee.class);
criteria.add(Restrictions.eq("Department", department));
return (List<Employee>) getHibernateTemplate().findByCriteria(criteria);
同样作为替代方案,如果我以下面提到的方式使用 DetachedCriteria,它是否会产生与我的旧代码相同的影响。
Session session =getHibernateTemplate().getSessionFactory().getCurrentSession();
DetachedCriteria criteria = DetachedCriteria.forClass(Employee.class);
criteria.add(Restrictions.eq("Department", department));
return criteria .getExecutableCriteria(session).list();
如果有更好的方法来处理这个问题,请提出建议,因为我不想改变HibernateDAOSupport和HibernateTemplate的用法。
在Hibernate5.2中,org.hibernate.会话
实现了javax.persistence.EntityManager
,因此您可以直接使用会话
创建条件查询。请参阅JPA-标准API。
但hibernate 5.2.1.Final中可能存在bug,如果调用JPA Criteria API < code > typed Query # get result list ,改为调用< code>Query#list(),则< code>setCacheable不起作用。
public <T> T getAll(Class<T> clazz, boolean cache){
CriteriaQuery<T> query = getCurrentSession().getCriteriaBuilder().createQuery(clazz);
query.select(query.from(clazz));
Query<T> q = getCurrentSession().createQuery(query); // CriteriaQueryTypeQueryAdapter instance
q.setCacheable(cache); // execute AbstractProducedQuery#setCacheable
// return q.getResultList(); // CriteriaQueryTypeQueryAdapter#getResultList(), cache not works
return q.list(); // AbstractProducedQuery#list() cache may be enabled
}
文档链接之后是状态:
旧的Hibernate org . Hibernate . criteria API,应视为已弃用
因此,只要切换到DetachedCriteria就可以摆脱当前的贬值,但它建议使用JPA Criteria(它不支持org.hhibernate.criterian.Restrictions等)。目前还不清楚,路线图也帮不了什么忙。
它确实提到:
“最终,Hibernate特定的标准特性将作为JPA javax.persistence.crimination.CriteriaQuery的扩展进行移植”
你对此有进一步了解吗?
使用标准生成器,如下所述:
//Use below imports:
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
//creating session. This you can create in your own way.
Configuration cfg = new Configuration();
cfg.configure("hibernate.cfg.xml");
cfg.addAnnotatedClass(Employee.class);
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
//**creating CriteriaBuilder**
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Employee> criteria = builder.createQuery(Employee.class);
Root<Employee> employeeRoot=criteria.from(Employee.class);
criteria.select(employeeRoot);
//**Adding where clause**
criteria.where(builder.equal(employeeRoot.get("employeeId"), "E01"));
List<Employee> employeeList=session.createQuery(criteria).getResultList();
逻辑很简单: 创建一个演员并发送一系列事件。 根据测试停止使用Akka.actor.kill或Akka.actor.poisonkill的演员。 再次启动执行元并测试它是否已正确恢复。 我正在将它迁移到Akka2.6和“AKKA键入”,但Kill和PoisonKill不可用。
随着Hibernate 5.2.2中Criteria类中createCriteria()的弃用,它的许多相关函数无法再使用。我找到了标准的另一种用法。createAlias(String,String)和从以下链接添加限制在Hibernate 5中弃用了createCriteria方法,但我找不到如何在JPA criteria中替换criteria中可用的以下函数: 请给我提供一种使用JPA标准A
除了Hazelcast之外,任何有Vertx群集管理器实际经验的人都对我们的以下要求有什么建议? 对于我们的(实时传感器数据)系统,我们在多个JVM中有数百个垂直链接,但我们不需要或不希望eventbus跨多个物理服务器。 我们在多个服务器上运行Vertx,但如果我们不在所有服务器之间共享一个eventbus,那么我们的平台就不那么复杂了(我们更愿意明确说明在服务器之间传递消息)。 Hazelca
持久化类(Persistent Object )简称 PO,在 Hibernate 中, PO 是由 POJO(即 java 类或实体类)和 hbm 映射配置组成。 简单点说,持久化类本质上就是一个与数据库表建立了映射关系的普通 Java 类(实体类),例如 User 类与数据库中 user 表通过映射文件 User.hbm.xml 建立了映射关系,此时 User 就是一个持久化类。 持久化类的规
到现在我们已经实现了我们那点唱机的一部分代码,我们看到了数组,哈希,方法,但我们还没有涉及到Ruby中其他的数据类型:数字,字符串,范围(ranges),正则表达式。下面我们就要花些时间来看看这些类型。 数字型Ruby 支持整型和浮点型两种数字类型。整型可以是任意长度(最大值由你机器的内存大小决定)。在一定范围内(通常是-230 to 230-1 or -262 to 262-1)在内部由二进制方
Hibernate的整个概念是从Java类属性中获取值并将它们保存到数据库表中。 映射文档帮助Hibernate确定如何从类中提取值并使用表和关联字段映射它们。 其对象或实例将存储在数据库表中的Java类在Hibernate中称为持久化类。 如果这些类遵循一些简单的规则(也称为Plain Old Java Object (POJO)编程模型),Hibernate的效果最佳。 持久化类有以下主要规则