Tag: jpa

Google App Engine – 删除JPQL查询和级联

我注意到使用下面的JPQL查询时不会删除PersistentUser的子代。 但是,如果我执行entityManager.remove(object) ,则会删除子项。 这是预期的吗? 为什么下面的JPQL查询也没有执行级联删除? @OneToMany(mappedBy = “persistentUser”, cascade = CascadeType.ALL) private Collection persistentLogins; … @Override @Transactional public final void removeUserTokens(final String username) { final Query query = entityManager.createQuery( “DELETE FROM PersistentUser p WHERE username = :username”); query.setParameter(“username”, username); query.executeUpdate(); }

使用@Async嵌套@Transactional方法

我正在使用Spring和JPA。 我打开了@EnableAsync和@EnableTransactionManagement 。 在我的用户注册服务方法中,我有一些我称之为@Async其他服务方法。 这些方法可以执行各种操作,例如发送欢迎电子邮件以及使用我们的第三方支付系统注册新创建的用户。 一切正常,直到我想validation第三方支付系统是否成功创建了用户。 此时, @Async方法尝试创建UserAccount (引用新创建的User )并使用javax.persistence.EntityNotFoundException: Unable to find com.dk.st.model.User with id 2017输出错误javax.persistence.EntityNotFoundException: Unable to find com.dk.st.model.User with id 2017 注册调用如下所示: private User registerUser(User newUser, Boolean waitForAccount) { String username = newUser.getUsername(); String email = newUser.getEmail(); // … Verify the user doesn’t already exist // I have tried all manner of […]

如何使用maven协调lombok和JPAMetalModel处理器

如何在maven构建中激活JPAMetaModelEntityProcessor注释处理器时使用Lombok 。 Maven配置: […] maven-compiler-plugin org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor org.projectlombok lombok provided org.hibernate.javax.persistence hibernate-jpa-2.0-api org.hibernate hibernate-jpamodelgen provided […] 在构建过程(mvn clean install)期间,正确生成了MetaModel对象,但似乎Lombok Annotation处理器不再添加到Javac编译中。 所有@Getter,@ Setter,……都不起作用。

在hibernate批量更新后,清除会话,刷新,刷新?

我们知道,在使用hibernate对数据库进行批量更新时(即使在HQL中),所做的更改不会复制到当前会话中存储的实体。 所以我可以调用session.refresh来加载对我的会话实体的修改。 我们经常调用flush来将修改发送到DB,但是文档说它“同步”会话和db … 这是否意味着flush能够为我的会话实体设置好的新db值? 或者flush会最终删除存储在实体中的旧数据库的新数据库值? (顺便说一句,如果hibernate的行为是第一个,它如何检测哪一个是“好的价值”?)。 如果我不能在这种情况下使用flush,那么在每次批量更新后清除会话是一个好习惯,这样我们肯定会在会话中有好的值?

如果在hibernate中查询参数为null或为空,如何处理?

我正在使用JPA,hibernate 3。 String sqlQuery = ” FROM TraceEntityVO where lotNumber =:lotNumber and mfrLocId=:mfrLocId and mfrDate=:mfrDate and qtyInitial=:qtyInitial and expDate=:expDate”; Query query = entityManager.createQuery(sqlQuery) .setParameter(“lotNumber”, traceEntityVO.getLotNumber()) .setParameter(“mfrLocId”, traceEntityVO.getMfrLocId()) .setParameter(“mfrDate”, traceEntityVO.getMfrDate()) .setParameter(“qtyInitial”, traceEntityVO.getQtyInitial()) .setParameter(“expDate”, traceEntityVO.getExpDate()); 当没有空值或空值时,此查询就像一个魅力。 但是traceEntityVO.getLotNumber(),traceEntityVO.getMfrLocId(),traceEntityVO.getExpDate()可能有null或空值。 在这种情况下,将针对变量检查值’null’或”,而不是null条件。 当我不确定参数值时,如何处理null或空? 我不想基于值(如果为空或null)动态构造查询。 这可能吗? 提前致谢..

在maven测试期间找不到persistence.xml

我正在尝试在用于集成测试的maven构建期间将测试数据加载到测试数据库中。 persistence.xml正在被正确地复制到target/test-classes/META-INF/ ,但是在运行测试时我得到了这个exception。 javax.persistence.PersistenceException:没有名为aimDatabase的EntityManager的持久性提供程序 看起来它没有找到或加载persistence.xml。

使用JUnit4进行测试时,Spring @transactional不会启动事务

我有以下配置。 org.hibernate.dialect.SQLServerDialect true true org.hibernate.dialect.SQLServerDialect false false true true 然后,当我运行带有insert语句的测试时,它们会产生错误消息: javax.persistence.TransactionRequiredException: Executing an update/delete query at org.hibernate.ejb.QueryImpl.executeUpdate(QueryImpl.java:47) 经过深思熟虑,我试过这个: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { “classpath:services.xml” }) @Transactional(propagation = Propagation.REQUIRED) @TransactionConfiguration(defaultRollback = true) @TestExecutionListeners(value = { DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class}) public class SimpleUnitTest { @Test public void simpleTest() throws Exception { System.out.println(entityManager.getTransaction().isActive()); assertTrue(entityManager.getTransaction().isActive()); } } 它失败了。 entityManager.getTransaction()。isActive()实际上是假的。 为什么Transactional测试不会开始交易?

如何使用EclipseLink和Spring配置动态编织?

如何使用EclipseLink和Spring配置动态编织? 现在我正在尝试使用Junit测试,但后来我必须让它与Tomcat一起工作(我的部门已经标准化了10年之久)。 我遇到两个主要问题: 1. Spring需要一个加载时间织布工: 例外: java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:181) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘org.springframework.context.weaving.AspectJWeavingEnabler#0’: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘loadTimeWeaver’: Initialization of bean failed; nested exception is java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an ‘addTransformer(ClassFileTransformer)’ method. Specify […]

使用Cassandra的Java最好的api /库是什么?

我正在寻找具有以下要求的API 它使用简单,简洁。 它并不臃肿。 使用Spring的做事方式,或者至少很容易使它与Spring一起使用 有一个Maven存储库,最好它已经存在于主存储库中 经过生产测试,意味着有相当多的人在生产应用中使用它。 帮帮我? 谢谢!

JPA。 如何将现有实体子类化并保留其ID?

假设我有两个经典的非抽象JPA类:Person和Student。 @Entity @Inheritance(strategy = InheritanceType.JOINED) public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private String id; // … } @Entity public class Student extends Person { // … } 现在有一些身份证的人进入大学并成为学生。 如何在JPA中处理这个事实并保持个人身份? student = new Student(); student.setPersonData(person.getPersonData()); student.setId(person.getId()); entityManager.persist(student); 上面的代码生成’传递给持久化的分离实体’exception,而使用entityManager.merge(student)跳过分配的id并创建具有新id的Person和Student的两个新实体。 任何想法如何保持原始ID?