hibernate的作者自己说:他在编写hibernate的时候,对sql语言不理解,是现场看着书写完的程序,所以又bug就在所难免了。
下面代码全部使用JPA
下面总结一下我碰到的bug:(不全,如果观者有其他的看法,请指出噢)
1、update
eg:update User u set u.password =? where u.person.id=? 这种用法会出现错误
解决办法:
Person person = em.find(Person.class,1)
person.getUser().setPassword("123456");
2、当一个类中是复合主键的时候
airline 的主键为:复合主键 航班的主键为出发城市和到达城市(startCIty endCIty);
eg: select count(a) from ariline a 这样会出现错误。
解决办法:
要实现查询数量,可以使用sql语句为:select count(a.id.startCity) from airline a ;
下面的做法就是要实现通用的上面的这种用法。
/**
* 计算实体的总记录数
* @param entityClass
* @return
*/
private <E> long getCount(Class<E> entityClass) throws Exception{
EntityManagerFactory factory = Persistence.createEntityManagerFactory("itcast");
EntityManager em = factory.createEntityManager();
String entityName = entityClass.getSimpleName();
Entity entity = entityClass.getAnnotation(Entity.class);
if(entity.name()!=null && !"".equals(entity.name())) entityName = entity.name();
//如何得到所有属性
PropertyDescriptor[] pdesc = Introspector.getBeanInfo(entityClass).getPropertyDescriptors();
String filed = "o";
for(PropertyDescriptor p : pdesc){
Method method = p.getReadMethod();//获取属性的getter()方法
if(method!=null && method.isAnnotationPresent(EmbeddedId.class)){//发现是一个复合主键类
filed = filed+ "." + p.getName()+ ".";// o.id
PropertyDescriptor[] idclassdesc = Introspector.getBeanInfo(p.getPropertyType()).getPropertyDescriptors();
filed += idclassdesc[0].getName().equals("class") ? idclassdesc[1].getName() : idclassdesc[0].getName();
break;
}
}
//System.out.println(filed);
long count = (Long)em.createQuery("select count("+ filed+ ") from "+ entityName+ " o").getSingleResult();
em.close();
factory.close();
return count;
}
分享到:
相关推荐
然而,有时候在使用Hibernate的过程中,可能会遇到一些问题,比如由JBoss Tools生成的XML文件出现bug。这个问题可能涉及到多个方面,包括XML文件的语法错误、配置错误或者是工具自身的兼容性问题。下面将详细探讨...
NULL 博文链接:https://imp9527.iteye.com/blog/438677
然而,在实际应用中,用户遇到了一个严重的bug,该bug导致了程序无法正常启动,具体表现为log4j警告信息的输出和Hibernate配置解析失败。 ### 关键知识点分析 #### 1. Log4j警告信息 在日志中,首先出现的是关于...
本篇将深入探讨如何在Hibernate中实现数据库操作而无需使用注解,以及如何解决在Hibernate 3中遇到的连接SQL的常见问题。 首先,让我们了解在Hibernate中免注解实现数据库操作的基本步骤: 1. **配置Hibernate**: ...
5.2.10版本是一个稳定版本,提供了一些bug修复和可能的新功能。对于开发者来说,这个版本意味着可以享受到稳定性和兼容性的保障。 在解压"hibernate-release-5.2.10.Final"后,我们可以找到以下关键组件: 1. **源...
- **bug 修复**:修复了之前版本存在的问题,确保软件的稳定性和可靠性。 - **API 稳定性**:随着 Hibernate 的成熟,其 API 会变得更加稳定,减少了不必要的变更,方便开发者长期使用和维护。 在实际使用 ...
这是因为新版本包含了对新特性和改进的实现,以及可能存在的bug修复。确保新jar包包含所有必要的依赖,以避免运行时出现类找不到或版本冲突的问题。 接下来,需要更新Hibernate配置文件`Hibernate.cfg.xml`。在...
### Hibernate各版本简介与下载地址 #### 概述 Hibernate是一款开源的对象关系映射(ORM)框架,它为Java应用程序提供了强大的数据持久化支持。通过将对象模型与数据库模型进行映射,Hibernate能够极大地简化...
在使用Hibernate进行数据库操作时,事务管理和`flush`方法的正确使用至关重要,因为它们直接影响到数据的一致性和安全性。在本文中,我们将深入探讨Hibernate的事务处理机制以及`flush`方法的用法,并分析为何在某些...
1. **新特性与改进**:Hibernate 4.2.1相比之前的版本可能引入了新的API、性能优化、bug修复以及对JPA规范的更好支持。例如,可能增强了对Java Persistence Query Language (JPQL)的支持,增加了更多的注解驱动的...
2. **changelog.txt**:这是一个非常重要的文件,它记录了从上一个版本到5.3.7.Final的所有改动,包括新功能、改进、修复的bug等。通过阅读此文件,开发者可以了解更新的内容和是否需要升级现有项目。 3. **lgpl....
标签"Hibernate 3.2"提示了文档是围绕这个特定版本的框架展开的,这意味着手册中可能包含了该版本特有的API、改进的特性、修复的bug等信息。开发者在使用这个版本时应当参考这个手册来了解如何充分利用Hibernate 3.2...
在Hibernate 4.2.2版本中,主要改进了性能,增加了对JPA 2.1规范的支持,并修复了一些已知的bug。以下是一些关键知识点: 1. **对象关系映射(ORM)**:Hibernate的核心功能是ORM,它允许开发者用Java对象来代表...
Final标识意味着这个版本经过了充分的测试,不打算再有大的功能更新,主要关注bug修复和维护。 3. **ORM(对象关系映射)**:ORM是一种编程技术,它将数据库中的表映射为Java类,将行映射为类的实例,列映射为类的...
3. **5.2.6.Final**:这是版本号,`Final`表示这是该版本的最终发行版,意味着在5.2.6系列中,所有的bug修复和功能改进都已经完成,适合在生产环境中使用。 在Hibernate 5.2.6版本中,可能包含以下重要特性与改进:...
4. Changelog:changelog.txt文件记录了自上一版本以来的所有变更,包括新功能、修复的bug、性能优化等。对于开发者来说,这是一个了解新版本特性、更新日志的重要资源。 5. 项目文件:在“project”目录下可能包含...
它默认的连接池在处理大量请求或需要高容错能力的应用场景下表现不佳,可能存在BUG。尽管如此,配置方法如下: ```xml <property name="hibernate.connection.pool_size">5 ``` 2. **配置第三方连接池** - **...
在3.6.6这个版本中,可能会包含一些特定的功能、改进和修复的bug。 描述部分提到的是一个博客链接,虽然没有具体内容,但通常博客会提供关于如何使用Hibernate 3.6.6的教程、经验分享或者问题解决的方法。这个链接...
6. **更新和支持**:作为beta5版本,它可能包含了对之前版本bug的修复,同时引入了一些新的特性和改进,以满足开发者不断变化的需求。 7. **插件结构**:在压缩包中,"features"目录包含了插件的元数据和依赖信息,...
此外,新版本修复了一些已知的bug,提升了工具的稳定性和可靠性。 值得注意的是,Hibernate Synchronizer 2.3.1不仅仅是一个简单的代码生成器,它还具备代码分析能力。通过检查现有的Java类库,它可以识别出未映射...