Questions tagged «spring-data-jpa»

Spring Data-JPA是Spring Data伞项目的一部分,它使实现基于JPA的存储库变得容易


7
如何在Spring Data中将OrderBy与findAll一起使用
我正在使用spring数据,我的DAO看起来像 public interface StudentDAO extends JpaRepository<StudentEntity, Integer> { public findAllOrderByIdAsc(); // I want to use some thing like this } 在上面的代码中,注释行显示了我的意图。Spring Data是否可以提供内置功能来使用这种方法来按ASC / DESC查找某一列的所有记录顺序?


9
如何使用spring-data-jpa更新实体?
这个问题几乎说明了一切。使用JPARepository如何更新实体? JPARepository只有一个save方法,它不会告诉我它是否实际上是在创建或更新。例如,我插入一个简单的对象数据库的用户,其中有三个领域:firstname,lastname和age: @Entity public class User { private String firstname; private String lastname; //Setters and getters for age omitted, but they are the same as with firstname and lastname. private int age; @Column public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } @Column …


11
如何向Spring Data JPA添加自定义方法
我正在研究Spring Data JPA。考虑下面的示例,默认情况下我将使所有crud和finder功能正常工作,如果我要自定义finder,那么也可以在界面本身中轻松完成。 @Transactional(readOnly = true) public interface AccountRepository extends JpaRepository<Account, Long> { @Query("<JPQ statement here>") List<Account> findByCustomer(Customer customer); } 我想知道如何为上述AccountRepository的实现添加完整的自定义方法?由于它是一个接口,所以我不能在那里实现该方法。

7
当使用getOne和findOne方法时Spring Data JPA
我有一个用例,其中它调用以下内容: @Override @Transactional(propagation=Propagation.REQUIRES_NEW) public UserControl getUserControlById(Integer id){ return this.userControlRepository.getOne(id); } 观察@Transactionalhas具有Propagation.REQUIRES_NEW,并且存储库使用getOne。当我运行该应用程序时,我收到以下错误消息: Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session ... 但是,如果我改变getOne(id)的findOne(id)一切工作正常。 顺便说一句,在用例调用getUserControlById方法之前,它已经调用了insertUserControl方法 @Override @Transactional(propagation=Propagation.REQUIRES_NEW) public UserControl insertUserControl(UserControl userControl) { return this.userControlRepository.save(userControl); } 这两种方法都是Propagation.REQUIRES_NEW,因为我正在执行简单的审核控制。 我使用该getOne方法是因为它是在JpaRepository接口中定义的,并且我的Repository接口从那里扩展,所以我正在使用JPA。 该JpaRepository接口扩展自CrudRepository。该findOne(id)方法在中定义CrudRepository。 我的问题是: 为什么该getOne(id)方法失败? 什么时候应该使用该getOne(id)方法? 我正在使用其他存储库,并且都使用该getOne(id)方法并且都正常工作,只有当我使用Propagation.REQUIRES_NEW时,它才会失败。 根据getOne API: 返回对具有给定标识符的实体的引用。 根据findOne API: 通过其ID检索实体。 3)什么时候应该使用该findOne(id)方法? …

14
Spring JPA选择特定列
我正在使用Spring JPA执行所有数据库操作。但是我不知道如何从Spring JPA的表中选择特定的列? 例如: SELECT projectId, projectName FROM projects

3
JPA和Spring Data JPA有什么区别?
我对Spring Data-JPA和JPA之间的区别感到困惑。我了解JPA,它是使用流行的ORM技术将Java对象持久保存到关系数据库的规范。 换句话说,JPA提供接口和其他ORM技术,实现那些称为JPA提供程序的接口,例如Hibernate。 现在,Spring Data JPA到底是什么? Spring Data JPA是否在JPA之上添加了更多功能(接口),并且仍然仅被指定还是JPA提供者? 我看到Spring Data JPA围绕存储库工作(DAO层:如果我没记错的话)。因此,我的意思是,使用“ Spring Data JPA + Hibernate”或仅使用“ Hibernate”定向有何不同?

8
如何测试Spring Data存储库?
我想要UserRepository借助Spring Data创建的存储库(例如)。我是spring-data的新手(但不是spring),并且使用了本教程。我选择的用于处理数据库的技术是JPA 2.1和Hibernate。问题是我对如何为这样的存储库编写单元测试一无所知。 让我们以create()方法为例。当我首先进行测试时,应该为它编写一个单元测试-这就是我遇到的三个问题: 首先,我如何将an的模拟注入接口EntityManager的不存在的实现中UserRepository?Spring Data将基于此接口生成一个实现: public interface UserRepository extends CrudRepository<User, Long> {} 但是,我不知道如何强制它使用EntityManager模拟和其他模拟-如果我自己编写实现,则可能会有一个setter方法EntityManager,允许我将模拟用于单元测试。(对于实际的数据库连接性,我有一个JpaConfiguration类,用@Configuration和注释,该类以@EnableJpaRepositories编程方式定义了,等等的Bean DataSource,但是存储库应该易于测试,并且可以覆盖这些内容)。EntityManagerFactoryEntityManager 其次,我应该测试互动吗?我很难弄清楚应该调用EntityManager和的什么方法Query(类似于verify(entityManager).createNamedQuery(anyString()).getResultList();),因为编写实现的不是我。 第三,首先我应该对Spring-Data生成的方法进行单元测试吗?据我所知,第三方库代码不应该进行单元测试-只有开发人员自己编写的代码才应该进行单元测试。但是,如果这是真的,但它仍然带来的第一个问题回到场景:比方说,我有一对夫妇的自定义方法为我的仓库,为此,我会写的实现,我怎么注入我的嘲笑EntityManager,并Query进入决赛,产生仓库? 注:我将使用测试驱动我的仓库都集成和单元测试。对于我的集成测试,我使用的是HSQL内存数据库,而显然我没有使用数据库进行单元测试。 可能是第四个问题,在集成测试中测试正确的对象图创建和对象图检索是否正确(例如,我使用Hibernate定义了复杂的对象图)? 更新:今天我继续尝试模拟注入-我创建了一个静态内部类来允许模拟注入。 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @Transactional @TransactionConfiguration(defaultRollback = true) public class UserRepositoryTest { @Configuration @EnableJpaRepositories(basePackages = "com.anything.repository") static class TestConfiguration { @Bean public EntityManagerFactory entityManagerFactory() { return mock(EntityManagerFactory.class); } @Bean public EntityManager entityManager() …


3
对于大型项目,Spring Data JPA与Hibernate有何不同?
我很难决定是应该坚持使用Hibernate进行新项目,还是选择JPA和新的Spring Data实现。 Spring Data框架适用于查询需求适中的大型项目还是小型项目? 虽然我当然看到了通过使用@Query注释在代码减少方面的优势,但是您对动态查询做了什么?当您要实现一个非常复杂的save()方法时该怎么办? 该文档说要创建您的主要存储库实现的Custom接口和实现,但是如果您需要访问Crud存储库本身的任何超级方法怎么办?Crud存储库实现了自定义方式-并非相反。这似乎是一个奇怪的设计。 我不确定该框架是否能够应对复杂和大型应用程序的挑战。我从来没有遇到过Hibernate的很多问题,并且我正在考虑坚持使用旧的可靠工具,而不是使用Spring Data JPA。 我该怎么办?如果使用Spring Data JPA,我会遇到哪些无法预见的复杂性和成本?

8
setMaxResults用于Spring-Data-JPA注释?
我正在尝试将Spring-Data-JPA合并到我的项目中。使我困惑的一件事是如何通过注释实现setMaxResults(n)? 例如,我的代码: public interface UserRepository extends CrudRepository<User , Long> { @Query(value="From User u where u.otherObj = ?1 ") public User findByOhterObj(OtherObj otherObj); } 我只需one (and only one)要从otherObj 返回User,但找不到任何方法来注释maxResults。有人可以给我一个提示吗? (mysql抱怨: com.mysql.jdbc.JDBC4PreparedStatement@5add5415: select user0_.id as id100_, user0_.created as created100_ from User user0_ where user0_.id=2 limit ** NOT SPECIFIED ** WARN util.JDBCExceptionReporter - …

16
Spring Data JPA-“找不到类型的属性”异常
好吧,我搜索了Google并发现了很多结果,但是没有一个能够回答我的问题。所以,就到这里。 我正在尝试通过最少地实现pinterest克隆来研究Spring MVC和Spring Data JPA。因此,以下是我认为与我的问题相关的代码部分。 型号/实体 @Entity @Table(name = "pin_item") public class PinItem implements Serializable { // properties ... @JoinColumn(name = "board_id", referencedColumnName = "user_board_id") @ManyToOne(optional = false) private UserBoard board; // getters and setters... } @Entity @Table(name = "user_board") public class UserBoard implements Serializable { // properties ... @OneToMany(cascade …


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.