Tag: jpa

如何使用Join定义JPA存储库查询?

我想通过注释@Query通过Jpa存储库创建一个Join查询我有三个表。 原生查询是: select application.APP_ID from user, customer, application where user.USE_CUSTOMER_ID = customer.CUS_ID and application.APP_CUSTOMER_ID = customer.CUS_ID and user.USE_ID=1; 现在我有了Table Hibernate实体,所以我在ApplicationRepository中尝试过 @Query(SELECT application FROM Application a INNER JOIN customer c ON c.customer.id = a.customer.id INNER JOIN user u ON u.customer.id = c.customer.id INNER JOIN application a ON a.user.id = u.id WHERE u.id = :user.id) List findApplicationsByUser(@Param(“User”) […]

如何使用通用存储库包装Play / JPA的Model类?

我不喜欢直接使用模型对象,因为这打破了封装。 相反,我更喜欢存储库模式 。 当我尝试实现一个简单的存储库时 public abstract class BaseRepository { public T findOne(String query, Object… params) { GenericModel.JPAQuery result = T.find(query, params); return result.first(); } } public class UserRepository extends BaseRepository{} UserRepository repo = new UserRepository(); repo.findOne(“byUsername”, “test”); 由于java的generics或JPA注释的工作方式,我得到了exception: java.lang.UnsupportedOperationException: Please annotate your JPA model with @javax.persistence.Entity annotation. at play.db.jpa.GenericModel.find(GenericModel.java:269) at repositories.BaseRepository.findOne(BaseRepository.java:12) 有没有解决的办法? (不用说模型是正确注释的,当我直接使用它时说User.find(“byUsername”, “test”).first()运行良好)。

是否可以在JPA中映射地图<String,List >?

我在想如果我使用Map<String,List>或Map<Long,List>这样的Map<Long,List>它会帮助我做一些事情,但我找不到任何一个例子来映射那种地图。 我的问题是,是否可以在JPA标准中进行这种映射,以及我应该使用哪种注释?

Hibernate中的小写注释

在hibernate中是否有任何方法可以将实体的列注释为字符串小写? 我的意思是例如 @Entity public class User { @Column private String username; } 我希望hibernate在没有绑定到特定数据库的所有查询中将用户名转换为小写。

JPA:如何在设置参数后获取/打印(类型)查询后面的JPQL查询字符串?

如何获取/打印(类型化)查询后面的JPQL查询字符串,即参数设置后? (例如用于调试目的) 一个简单的toString()似乎没有做到这一点…… 谢谢

Spring DaoSupport和@PersistanceContext EntityManager?

理解Spring最困难的事情之一就是Spring支持针对同一问题的多种方法。 所以在我的应用程序中,我使用注入的EntityManager使用@PersistanceContext注释,例如: @Repository public class JpaDao extends JpaDaoSupport implements Dao { @PersistenceContext(unitName = “PersistanceUnit”, type = PersistenceContextType.EXTENDED) private EntityManager em; 这种方法是否与扩展JpaDaoSupport (需要注入EntityManager) 兼容 ? 对我来说,它似乎是解决相同问题的两种不兼容的方法,但我想从一些有更多Spring经验的人那里得到一些建议。 如果我不应该扩展JpaDaoSupport,我应该如何使用@PersistenceContext方法构建我的DAO?

JPA中的事务使用多个线程

我的目标是使用unit testing在我的应用程序中激发一个乐观的锁定exception。 我已经理解了如何在理论上做到这一点。 但我在实践中的问题是如何在两个线程之间维护一个事务? 所以,这就是我到目前为止所做的: 我正在使用JUnit测试: @RunWith(SpringJUnit4ClassRunner.class) 使用EntityManager org.springframework.orm.jpa.JpaTransactionManager 其中每个方法的定义都是@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 并使用entityManager.getTransaction().begin();启动事务entityManager.getTransaction().begin(); 并以entityManager.getTransaction().rollback());结束entityManager.getTransaction().rollback()); 这在单线程测试中运行良好,保存,更新等。 要创建多个线程,我使用Springs TaskExecutor(类似于这里所描述的: 使用TaskExecutor示例的任何好的Spring线程? ) 但是我需要做些什么来维护两个线程之间的事务呢? 我尝试过使用@Transactional注释run() – 方法之类的东西,但这不起作用。

在收集字段更改时触发JPA侦听器

我正在使用EntityListeners( @PreUpdate )在我的实体更改后执行某些操作。 但是我注意到实体内部集合的更改不会触发JPA实体侦听器,这是有道理的,因为包含该实体的表没有更改,但是有多对多的表。 有没有办法让实体监听器在集合发生变化时触发?

TransactionAttribute注释(@REQUIRES_NEW)被忽略

我有一个问题,两个单独的事务以与它们实际执行的相反的顺序刷新到数据库。 这是商业案例:RemoteJob-RemoteJobEvent一对多关系。 每次创建新事件时,都会获取一个时间戳,并在RemoteJob和RemoteJobEvent的lastModified字段中设置,并保留两个记录(一个更新+一个插入)。 这是代码中的样子: class Main { @TransactionAttribute(TransactionAttributeType.REQUIRED) public void mainMethod(…) { RemoteJob job = remoteJobDAO.findById(…); // … addEvent(job, EVENT_CODE_10); // Here the separate transaction should have ended and its results // permanently visible in the database. We refresh the job then // to update it with the added event: remoteJobDAO.refresh(job); // calls EntityManager.refresh() // […]

使用JPA的GWT – 没有持久性提供程序

GWT与JPA 我的eclipse工作区中有两个项目,我们将它们命名为: -JPAProject -GWTProject JPAProject包含JPA配置内容(persistence.xml,实体类等)。 GWTProject是一个示例GWT项目(取自官方GWT教程)。 这两个项目都很好。 也就是说,我可以在JPAProject中创建EMF(EntityManagerFactory)并从数据库中获取实体。 GWTProject工作正常,我可以运行它,在浏览器中填写字段文本并获得响应。 我的目标是从GWTProject调用JPAProject来获取实体。 但问题是,在调用DAO时,我得到以下exception: [WARN] Server class ‘com.emergit.service.dao.profile.ProfileDaoService’ could not be found in the web app, but was found on the system classpath [WARN] Adding classpath entry ‘file:/home/maliniak/workspace/emergit/build/classes/’ to the web app classpath for this session [WARN] /gwttest/greet javax.persistence.PersistenceException: No Persistence provider for EntityManager named emergitPU at javax.persistence.Persistence.createEntityManagerFactory(Unknown […]