Tag: hibernate

c3p0说 – “java.lang.Exception:DEBUG ONLY:过期资源检出堆栈跟踪”启动一个hibernate事务

最近,我的tomcat开始挂起。 这些请求从未得到回复。 我发现这是因为连接永远不会返回到连接池。 我使用了c3p0和hibernate,数据库是mysql 5.5 为了调试连接泄漏,我在hibernate.cfg.xml添加了以下属性 30 true 添加后,在日志中说: [2013-10-12 23:40:22.487] [ INFO] BasicResourcePool.removeResource:1392 – A checked-out resource is overdue, and will be destroyed: com.mchange.v2.c3p0.impl.NewPooledConnection@1f0c0dd [2013-10-12 23:40:22.487] [ INFO] BasicResourcePool.removeResource:1395 – Logging the stack trace by which the overdue resource was checked-out. java.lang.Exception: DEBUG ONLY: Overdue resource check-out stack trace. 指向at dao.DAOBasicInfo.getBean(DAOBasicInfo.java:69) public static Basicinfo […]

如何在Oracle下处理大型事务?

我们的应用程序基于Hibernate 3.5,Spring 3.1和Oracle下我继续运行Max Cursors Exceeded问题,主要是在处理大型事务时(涉及的实体数量大,执行的查询数量)。 在H2,MS SQL Server或MySQL上运行应用程序时不会出现此类问题。 如果我正确理解了我的调查结果,Oracle会为事务中构建的每个ResultSet创建一个游标,这些游标只有在Connection上调用close (即Hibernate Session)时才会释放。 我的问题(现在): 在交易正在进行时,有没有办法让Oracle清理游标? 在事务中的特定点之后,有许多查询结果不需要,但Oracle似乎保持游标打开。 是否有“正常”的最大光标设置? 默认值为50,我们的大多数客户都设置了400-600个游标,但我见过的一些论坛post似乎表明几千个更常见。 当我们建议将最大游标数量增加到(例如)5000时,我们似乎也从我们的客户端DBA获得了很多回击。这真的是一个大问题吗? 坦率地说,我读过的大多数论坛帖都与ResultSet / Statement / Connection泄漏有关,但是根据我们的分析,我们没有它们; 当我们关闭连接时,当前光标计数恢复正常。 我们似乎是唯一一个在单个事务中尝试执行几百个操作的问题。 这真的是这个exception吗? 谢谢你的建议; 这些东西甚至使我的白发脱落

org.hibernate.QueryException:JPA样式的位置参数不是一个完整的序数

我有以下JPQL请求; @Query(value = “select req_t ” + “from TransactionRelation tr ” + “inner join tr.requestTransaction req_t ” + “inner join req_t.transactionStateHistory req_t_h ” + “inner join tr.responseTransaction resp_t ” + “inner join resp_t.transactionStateHistory resp_t_h ” + “where req_t.id >?1 ” + “and req_t.receiver.id=?2 and req_t.requestType in ?3” + “and NOT EXISTS (select t from resp_t_h […]

在JPA查询中排序返回Child对象

因此,如果我的JPA查询是这样的:从父p中选择不同的p,通过p.someProperty从左边连接获取p.children顺序 我正确地得到了p.someProperty排序的结果,并且我正确地获取并填充了我的p.children集合。 但我希望我的查询类似于“按p.someProperty,p.children.someChildProperty排序”,以便填充每个父对象内部的集合由someChildProperty进行子排序。 当我考虑实际为这些调用生成的sql时,这看起来很直观,但是当我尝试映射回分层对象时,我想这不太可能。

Spring Data JPA JpaRepository.save(实体)不返回数据库默认值

我有一个相当简单的问题。 在单个事务中,我的代码看起来像这样: MyClass c = new MyClass(); c.setPropA(“A”); c = myClassRepository.save(c); c.setPropC(“C”); 我的实体看起来像这样: @Entity @Table(name = “MY_CLASS”) public class MyClass { private String propA; private String propB; private String propC; @Id @Column(name = “PROP_A”, unique = true, nullable = false, updatable = false) public String getPropA() { return propA; } public void setPropA(String propA) { […]

序列化到json响应时避免hibernate延迟初始化exception的更好方法

这是参考我一个月前提出的问题 。 在这个问题中 ,当json序列化时避免延迟初始化exception的答案是将null设置为导致延迟初始化exception的变量。 但是考虑一下这个类有多少依赖关系。 现在随着代码库的增长而每次我都要将代码中的麻烦变量设置为null以避免json序列化问题。 当代码库很大时,该方法看起来不整洁。 下面显示的示例代码看起来不太好。 //setting some variables to avoid lazy init exception in jackson mapper serialization batch.setEnrollmentList(null); List scheduleList = (ArrayList) batch.getBatchScheduleList(); for (BatchSchedule batchSchedule : scheduleList) { batchSchedule.setBatch(null); } batch.getLecturer().setBatchList(null); batch.getLecturer().setSubjectList(null); batch.getSubject().setBatchList(null); batch.getSubject().setLecturerList(null); 你能否告诉我一个更好的方法来处理这个问题。 谢谢。

Spring JPA – 枚举中枚举字段的默认值

我们有一个带有枚举字段的实体 – emailCommunicationStatus ,我们想要使用JPA注释为其设置默认值 – ‘UNKNOWN’ 。 但是,当我们将实体保存到DB时,此字段的值为null而不是。 对于布尔字段 – isLocked ,保存正确的默认值( false )。 @Entity public class Account { @Id @GeneratedValue @Column(name = “id”) protected Long id; @Column(columnDefinition = “boolean default false”) private boolean isLocked; @Column(length = 32, columnDefinition = “varchar(32) default ‘UNKNOWN'”) @Enumerated(value = EnumType.STRING) private CommunicationStatus emailCommunicationStatus; PlayerAccount() { super(); } } public […]

Hibernate自动增量属性

我知道你可以通过映射自动增加id; 但它是否也有可能增加一个属性,我到目前为止尝试的不起作用;

如何在hibernate中保留实体期间validation实体上的约束

我有一个带字段名称的实体,我希望它不超过255,所以我这样定义: @Entity public class A implements Serializable { … @NotNull @Size(max=255) private String name; 我希望它在我调用a.persist()时得到validation,因此如果name太长则抛出exception。 我在validation.xml中定义了HibernateValidator: org.hibernate.validator.HibernateValidator org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator org.hibernate.validator.engine.resolver.DefaultTraversableResolver org.hibernate.validator.engine.ConstraintValidatorFactoryImpl 但它不起作用。 在持久化期间不会抛出exception,并且仅在提交期间,当刷新实体管理器时,我是否得到exception,即使这样,它也是数据库中的exception(因为它对大小为255的列也有限制)。 所以我相信我的validation根本不起作用。 如果你帮助我解决这两个问题,我会很高兴:1)如何在持久化期间进行validation而不是在刷新期间2)如何在validation失败时导致validation抛出exception?

如何从代理类中检索代理类?

我正在使用带有代理的Hibernate,并且我获得属于类的对象,例如test.DBUser$$EnhancerByCGLIB$$40e99a2d 。 是否有一个Hibernate方法从代理类中检索基类(在本例中为test.DBUser )? 我知道Hibernate.getClass() ,但是它需要一个Object ,而我正在寻找一个将Class作为输入的方法。