我在Hibernate的Internet上看到了一些transaction.commit()
用于select语句的示例。下面是示例代码。
public static List<?> list(Class<?> className,int start,int limit,SearchFilter[] searchFilter){
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
Criteria criteria = session.createCriteria(className);
criteria.setFirstResult(start);
criteria.setMaxResults(limit);
for(SearchFilter sf : searchFilter){
String[] values = sf.getValue();
if(values != null){
if(values.length == 1) {
criteria.add(Restrictions.eq(sf.getField(), values[0]));
}else{
criteria.add(Restrictions.in(sf.getField(), values));
}
}
}
List<?> Objects = criteria.list();
transaction.commit();
return Objects;
}catch (Exception e) {
transaction.rollback();
e.printStackTrace();
}finally{
session.close();
}
return null;
}
为什么我们要为select语句开始并提交事务?
一切都在交易范围内发生。有时,软件会自动为您管理交易,而hibernate则不会。无论是只读还是否,在hibernate状态下都必须打开和关闭事务。
问题内容: 我想使用Hibernate选择单列而不是整个对象。到目前为止,我有这个: 我的问题是上述代码将整个People表返回为一个对象,而不仅仅是“ firstname”。我不确定如何指定仅返回“名字”而不是整个对象。 问题答案: 您可以像这样设置投影: 有了这个,您只能得到名字的回报。 我在同一情况下在堆栈上找到了另一个链接。希望这也将对您有所帮助。
我正在使用Postgres 9.3.5,最近将Hibernate从3.2更新到4.3.11。 因此,我无法运行“选择…更新”查询,而只能运行“选择…”。。对于我来说,“for update”是不够的,因为它返回 无法提取结果集。原因:错误:无法将FOR UPDATE应用于外部联接的可空端 我试图使用的标准如下: 我正在使用以下锁定: 在3.2中:标准。设置锁定模式(锁定模式。升级); 在4.3.1
上下文:我有两个表Secret_Agent和secret_mission。两者之间有一种@manytomany的关系,因为可以给许多特工执行相同的秘密任务,而同一个特工可以给许多秘密任务。 表SECRET_AGENT 列SecretAgentId,SecretAgentName 表SECRET_MISSION 列SecretMissionId、SecretMissionName、SecretMis
我正在尝试使用Spring Boot和Spring数据通过鉴别器实现多租户。 我创建了一个抽象类来表示多租户实体。类似于此: 如何全局启用多租户Hibernate过滤器?
问题内容: 假设我有两个表格,书籍和评论。评论具有一列,星号,其值可以介于1到5之间。一本书可以包含许多评论。 如何选择所有书籍,以便使用Criteria API返回每本书的前3名和后3条评论(而不是所有评论)? 如果Criteria API无法使用,我会提出其他建议,例如HQL,SQL等。 问题答案: 回答我自己的问题… 我实际上对这有多么困难感到惊讶。涉及查询书籍的所有解决方案以及每本书具有其
问题内容: 有一个专有的hibernate注释,用于指定在DDL生成时使用的 外键 约束 名称 :。 还有一种方法可以指定 主键 约束 名称 吗? 问题答案: 对于标准JPA来说是不可能的,并且对于主键约束也不受Hibernate支持。 关于此功能请求(HB-1245)确实存在一个非常老的问题,但看起来并没有引起太多关注。