Tag: 冬眠

行被其他事务更新或删除(或未保存的值映射不正确)

我有一个在Web服务器上运行的Java项目。 我总是打这个例外。 我读了一些文档,发现悲观的locking(或乐观的,但我读的悲观是更好的)是防止这种exception的最好办法。 但是我找不到任何可以解释如何使用它的明确例子。 我的方法是: @Transactional Public void test(Email email, String Subject){ getEmailById(String id); email.setSubject(Subject); updateEmail(email); } 而: Email是一个hibernate类(它将是数据库中的一个表) getEmailById(String id)是一个函数,返回一个email (这个方法不是@Transctional注释) updateEmail(email) :是一个更新电子邮件的方法。 注:我使用hibernate保存,更新等(例如: session.getcurrentSession.save(email) ) 例外: ERROR 2011-12-21 15:29:24,910 Could not synchronize database state with session [myScheduler-1] org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [email#21] at […]

为什么不使用Spring的OpenEntityManagerInViewFilter

虽然在Spring的OpenSession / EntityManagerInViewFilter的主题上写了很多post,但是我找不到任何提及它的缺陷。 据我所知,并假设使用@Transactional服务层的典型分层Web应用程序体系结构,filter的工作原理如下: filter拦截一个servlet请求 filter打开一个EntityManager并将其绑定到当前线程 networking控制器被调用 Web控制器调用服务 事务拦截器开始一个新的事务,检索线程绑定的EntityManager并将其绑定到事务 服务被调用,用EntityManager做一些东西,然后返回 事务拦截器刷新EntityManager然后提交事务 networking控制器准备视图,然后返回 视图被build立 filterclosuresEntityManager并从当前线程中解除绑定 在步骤8和9中,由线程的EntityManager加载的对象仍然被pipe理。 因此,如果在这些步骤中使用了惰性关联,那么将使用仍然打开的EntityManager从数据库加载它们。 据我所知,每个这样的访问都要求数据库打开一个事务。 Spring的事务pipe理将不知道这一点,因此我称之为“隐式事务”。 我看到2个问题: 加载多个惰性关联会导致多个数据库事务,这可能会影响性能 根对象及其惰性关联会加载到不同的数据库事务中,因此数据可能会过时(例如,线程1加载的根,线程2更新的根关联,线程1加载的根关联) 一方面,这两个问题似乎足以拒绝使用这个filter(性能命中,数据不一致)。 另一方面,这个解决scheme非常方便,避免写几行代码,问题1可能不那么明显,问题2可能是纯粹的偏执狂。 你怎么看? 谢谢!

JPA @OneToMany – >父 – 子参考(外键)

我有一个关于从子实体引用ParentEntities的问题如果我有这样的事情: Parent.java: @Entity(name ="Parent") public class Parent { @Id @Generate….. @Column private int id; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "parent") private Set<Child> children; simple … getter and setter … } 和Child.java: @Entity(name ="Child") public class Child{ @Id @Generate…. @Column private int id; @ManyToOne private Parent parent; … simple getter an setter } […]

使用hibernate的程序不会终止

我使用Hibernate创build了一个程序。 程序到达主函数结束,不过程序正在运行。 我想知道当SessionFactory使用Hibernate Version 4.x进行configuration时是否会发生这种情况。 configuration的方式错了吗? manual1_1_first_hibernate_apps.java public static void main(String[] args) { args[0] ="list"; if (args.length <= 0) { System.err.println("argement was not given"); return; } manual1_1_first_hibernate_apps mgr = new manual1_1_first_hibernate_apps(); if (args[0].equals("store")) { mgr.createAndStoreEvent("My Event", new Date()); } else if (args[0].equals("list")) { mgr.<Event>listEvents().stream() .map(e -> "Event: " + e.getTitle() + " Time: " + […]

hibernate:如何解决“从X到Y更改实例的标识符”?

org.hibernate.HibernateException: identifier of an instance of org.cometd.hibernate.User altered from 12 to 3 实际上,我的user表是真的必须dynamic地改变它的值,我的Java应用程序是multithreading的。 任何想法如何解决它?

hibernate:刷新,执行,复制和刷新

我希望我知道这个列表中的每个项目到底是什么,它是如何工作的,后果是什么以及什么时候使用正确的时间。 刷新 赶出 复制 红晕 我甚至想知道每个人都做了什么,但我不是很确定,所以我要求你的帮助,因为我真的很想理解它。 我知道这是一个非常普遍的问题,但我认为真正有用的知道这一切。 谢谢。

Spring 3.1inheritance的Hibernate 4exception

嗨,我刚刚开始使用Spring,与Hibernate4和Maven。 基本上我的类层次结构是从MicroTask扩展的HUmanMicroTask。 将来可能会有几个其他类从MicroTask扩展。 我试图有一个每个具体类的表,这是最简单的方法来启动和运行spring3和hibernate4.然而,当我运行我的代码。 我不断收到以下exception 13:11:52,260 ERROR TestContextManager:324 – Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@6ef137d] to prepare test instance [HumanMicroTaskBaseHibernateTest@52c05d3b] java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:157) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) […]

通过hibernate来保持Joda时间的DateTime

我在我的Play应用程序中使用Jodatime,但目前不得不做一堆来回转换为java.util.Date和java.sql.Time 。 由于jodatime包含在Play分配中,所以我想可能有更好的方法来做到这一点。 有没有什么办法可以使我的模型字段DateTime s而不是java.util.Date和java.sql.Time所以转换是自动完成的? 还有另外一种精简的方法吗?

在Hibernate中使用@Temporal注解是什么?

Hibernate文档具有以下关于@Temporal注释的信息: 在普通的Java API中,没有定义时间的时间精度。 处理时态数据时,可能需要描述数据库中的期望精度。 时间数据可以具有DATE,TIME或TIMESTAMP精度(即实际date,只有时间或两者)。 使用@Temporal注释来微调。 temporal precision of time is not defined是什么意思? 什么是时temporal数据及其精度? 它是如何微调的?

没有Hibernate Session绑定到线程,configuration不允许在这里创build非事务性的

当我调用一个使用SessionFactory.getCurrentSession()的DAO方法时,我得到这个exception。 DAO类用@Transactional注释,我也在应用程序上下文configuration文件中声明了<tx:annotation-driven/> 。 我可以调用执行HQL查询的DAO方法,但每当我调用一个首先获得Hibernate会话的DAO方法时,就会遇到下面的exception: SEVERE: Failed to save the object. org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63) at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:622) at gov.noaa.ncdc.cmb.persistence.dao.GenericDaoHibernateImpl.getCurrentSession(GenericDaoHibernateImpl.java:56) at gov.noaa.ncdc.cmb.persistence.dao.GenericDaoHibernateImpl.saveOrUpdate(GenericDaoHibernateImpl.java:187) 我有以下应用程序上下文configuration文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:flex="http://www.springframework.org/schema/flex" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/flex http://www.springframework.org/schema/flex/spring-flex-1.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <!– ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ –> <!– […]