我不熟悉hibernate,了解了HCQL(hibernate Criteria查询语言),并尝试运行下面的代码,但收到警告——“来自类型SharedSessionContract的方法createCriteria(Class)已被弃用”
Criteria myCriteria = session.createCriteria(Employee.class);
Criterion nameCriteria = Restrictions.eq("name", "Amit");
myCriteria.add(nameCriteria);
所以我在谷歌上搜索并尝试了下面的代码,但现在在myCriteria.add(nameCriteria)方法中出现错误-'方法add(CriteriaQuery)类型未定义'
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Employee> criteria = builder.createQuery(Employee.class);
Root<Employee> employeeRoot=criteria.from(Employee.class);
criteria.select(employeeRoot);
Criterion nameCriteria = Restrictions.eq("name", "Amit");
criteria.add(nameCriteria);
有人能帮我吗?非常感谢。
正如我所看到的,您正试图将这两个API结合在一起。Restrictions.eq()
是一个专有的Hibernate API,您不能将它与CriteriaQuery
一起使用。如果您想使用JPA Criteria API,您可以重写此查询如下:
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Employee> criteria = builder.createQuery(Employee.class);
Root<Employee> employeeRoot = criteria.from(Employee.class);
criteria.select(employeeRoot)
.where(
builder.equal(
employeeRoot.get("name"),
"Amit")
);
TypedQuery<Employee> query = em.createQuery(criteria);
Employee emp = query.getSingleResult();
参见参考文件
问题内容: 使用hibernate条件时,仅更改联接类型会影响根域类的子级集合的结果。 例如,让Parent类与Child类具有一对多关系,并具有以下数据: 使用以下hibernate条件返回1父行,访问子集合结果将返回两行: 但是,当通过左连接更改上述代码时,将返回1父行,但是在访问子集合时仅返回匹配的子行。 为什么会出现这种副作用?我发现了一些关于使用或避免这种副作用的讨论,具体取决于您的预期
问题内容: 如何使用hibernate限制来实现此目的? 问题答案: 认为有效
问题内容: 您好,我在示例中使用了hibernate模式。对于bean Table Audit Trial,我想获取包含上限和下限的日期范围之间的审计试用。我的代码如下 我的开始日期是。且结束日期为。但是它只会将结果赋予。不执行包含性搜索。我正在使用SQL Server。 问题答案: 我认为您的auditDate实际上是一个时间戳。如果是这样的话,那是正常的,因为25/05/2011表示25/05
问题内容: 如何将sql查询写入hibernate条件? 问题答案: 想我找到了答案。您必须使用Projection.sqlProjection()而不是Projections.sum()。例:
我的Hibernate bean ContentElementTypeProperty引用了另一个Hibernate bean TestUnitType(多对一)。 TestUnitType是ContentElementTypeProperty的字段。 在数据库中,testunittypeid是表ContentElementTypeProperty中的一列。 我正在寻求从contentelemen
我创建了一个对象,它映射了数据库中的两个表:字典表和令牌表。表示这两个表之间连接的对象(类)称为DictionaryToken。 下面是课程: 公共类DictionaryToken{private static Logger LOG=Logger.getLogger(DictionaryToken.class); 这是我的问题。除非我添加了一个条件,否则我可以使用带有这个对象的服务执行查询。下面是