Tag: spring data jpa

Spring数据jpa分离实体

我开始使用Spring Data JPA处理Spring Boot应用程序,以在用户和角色之间建立ManyToMany关系。 此关系在User类中定义如下: @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinTable(name=”user_role”, joinColumns = {@JoinColumn(name=”user_id”)}, inverseJoinColumns = {@JoinColumn(name=”role_id”)}) private Set roles; 我创建角色使用: @Transactional private void generateSeedRoles() { UserRole adminRole = new UserRole(RoleEnum.ADMIN.toString()); userRoleRepository.save(adminRole); UserRole userRole = new UserRole(RoleEnum.USER.toString()); userRoleRepository.save(userRole); } 之后为用户分配角色失败: @Transactional private void generateSeedUsers() { UserRole adminRole = userRoleRepository.findUserRoleByRoleName(“ADMIN”); User user = User.createUser(“user1”, “user1@user.com”, […]

Spring Data JPA – 是否可以对计算属性进行排序?

假设您有以下实体: @Entity public class Game { @Id @GeneratedValue private Integer id; private String name; private Calendar startTime; private int durationInSeconds; public GameStatus getStatus() { if( startTime.after(Calendar.getInstance())) { return GameStatus.SCHEDULED; } else { Calendar endTime = Calendar.getInstance(); endTime.setTime(startTime.getTime()); endTime.roll(Calendar.SECOND, durationInSeconds); if( endTime.after(Calendar.getInstance())) { return GameStatus.OPEN_FOR_PLAY; } else { return GameStatus.FINISHED; } } } } 如果我的GameRepository是PagingAndSortingRepository ,我怎样才能得到一个结果页面,按status属性排序? […]

Java Spring REST API处理许多可选参数

我目前正忙着使用Spring Boot REST API项目进行教学。 我有一个相当大的表,其中22列被加载到MySQL数据库中,并且我试图让用户能够按多列过滤结果(假设这个示例的目的是6)。 我目前正在扩展一个Repository并初始化了一些方法,例如findByParam1和findByParam2以及findByParam1OrderByParam2Desc等,并且已经validation它们是按预期工作的。 我向你们提出的问题是最好的方法,允许用户能够利用所有6个可选的RequestParams,而无需编写大量的条件/存储库方法变体。 例如,我想让用户能够点击url home / get-data /获取所有结果,home / get-data?param1 = xx根据param1进行过滤,可能还有home / get-data?param1 = xx&param2 = yy …&param6 = zz来过滤所有可选参数。 作为参考,这是我的控制器的相关块(粗略地)的样子。 @RequestMapping(value = “/get-data”, method = RequestMethod.GET) public List getData(@RequestParam Map params) { String p1 = params.get(“param1”); if(p1 != null) { return this.someRepository.findByParam1(p1); } return this.someRepository.findAll(); } 到目前为止我的问题是我正在进行的这种方式意味着我基本上需要n! 我的存储库中支持此function的方法数量,n等于我想要过滤的字段/列数量。 有没有更好的方法来处理这个问题,也许我正在过滤存储库’就地’,所以我可以简单地过滤’就地’,因为我检查地图以查看用户确实填充了哪些filter? […]

如何使用JPA Query将数据插入db?

我的预备语句有问题,但我无法弄清楚错误的位置。 我试图将URI链接插入数据库。 @Repository public interface LoggerDao extends CrudRepository { @Query(“select t from Logger t where t.user.id=?#{principal.id}”) List findAll(); @Modifying @Query(value = “insert into Logger t (t.redirect, t.user.id) VALUES (:insertLink,?#{principal.id})”, nativeQuery = true) @Transactional void logURI(@Param(“insertLink”) String insertLink); 错误 2017-03-11 19:52:59.157 WARN 65154 — [nio-8080-exec-8] ohengine.jdbc.spi.SqlExceptionHelper : SQL Error: 42001, SQLState: 42001 2017-03-11 19:52:59.157 ERROR 65154 […]

Spring Boot:Hibernate和Flyway启动顺序

我创建了Spring应用程序。 附加了Pom xml。 它具有这样的配置(如下)和一些用于Flyway数据库迁移工具的db / migration / V1__init.sql。 它有hsqldb内存数据库,它是在应用程序启动后创建的。 创作后很干净。 我希望Hibernate基于实体类创建一个模式,然后Flyway填充表格。 现在,Flyway在创建表之前启动V1__init.sql并抛出exception。 如何更改此订单或我可以执行哪些解决方案? spring.datasource.testWhileIdle = true spring.datasource.validationQuery = SELECT 1 spring.jpa.show-sql = true spring.jpa.hibernate.ddl-auto = create-drop spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.HSQLDialect pom.xml中: org.springframework.boot spring-boot-starter-parent 1.3.3.RELEASE UTF-8 1.8 org.springframework.boot spring-boot-starter-web 1.3.2.RELEASE org.hsqldb hsqldb runtime org.hibernate hibernate-core 4.3.11.Final org.springframework spring-orm 4.2.5.RELEASE org.thymeleaf thymeleaf-spring4 2.1.4.RELEASE net.sourceforge.nekohtml nekohtml […]

spring-data-rest集成测试因简单的json请求而失败

我的spring-data-rest集成测试因简单的json请求而失败。 考虑下面的jpa模型 Order.java public class Order { @Id @GeneratedValue// private Long id; @ManyToOne(fetch = FetchType.LAZY)// private Person creator; private String type; public Order(Person creator) { this.creator = creator; } // getters and setters } Person.java ic class Person { @Id @GeneratedValue private Long id; @Description(“A person’s first name”) // private String firstName; @Description(“A person’s last […]

调用init方法失败; 嵌套exception是java.lang.IllegalArgumentException:对于方法public abstract的查询,validation失败

我正在开发Spring MVC + Spring-data-jpa + querydsl ,我是新手。 当我为querydsl编写代码时(在该代码工作正常之前),当我添加querydsl相关代码时,我开始收到以下错误,不知道出了什么问题。 请指导。 参考错误: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘visitRepository’: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.journaldev.spring.repository.VisitRepository.findByVisitType()! at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:753) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) at […]

我是否必须在try-with-resources-block中关闭已终止的流式查询结果?

在Spring Data JPA文档中它说的关于流: Stream可能会包装底层数据存储特定资源,因此必须在使用后关闭。 您可以使用close()方法手动关闭Stream,也可以使用Java 7 try-with-resources块。 请参阅: http : //docs.spring.io/spring-data/jpa/docs/1.10.1.RELEASE/reference/html/#repositories.query-streaming 如果我使用forEach ,count或其他终端操作处理流,它应该已经关闭(并且不能再次重复使用),并且我不必将该流包装在其他try-resources-block中(假设我的块没有不要抛出任何exception),或者我错在这里?

Spring Data PageImpl没有返回正确大小的页面?

我正在尝试使用从数据库中检索的对象列表创建一个新Page 。 首先,我从DB获取所有元素,将其转换为Stream,然后使用lambda过滤结果。 然后我需要一个具有一定数量元素的页面,但是,实例化一个新的PageImpl似乎不会返回一个具有正确大小的页面。 这是我的代码: List listaFinal; Stream stream = produtosRepository.findAll().stream(); listaFinal = stream.filter(p -> p.getProdNome().contains(“uio”)).collect(Collectors.toList()); long total = listaFinal.size(); Page imp = new PageImpl(listaFinal,pageable,total); 这是调试的屏幕截图: 请注意,Pageable对象中的大小设置为20,并且它理解它需要4个页面来呈现70个元素,但它返回整个列表。 我错过了什么? 编辑回答托马斯的评论: 我理解如何使用Page返回一小部分数据。 我展示的代码是我尝试使用lambda表达式来过滤我的集合。 对我来说问题是我想使用Java 8的lambda通过Spring Data JPA查询数据库。 我习惯了VB.NET和Entity function(x)查询表达式,并想知道如何使用Spring JPA做同样的事情。 在我的存储库中,Im使用extends JpaRepository, QueryDslPredicateExecutor ,这使我可以访问findAll(Predicate,Pageable) 。 但是,Predicate没有输入,所以我不能简单地在查询中使用p -> p.getProdNome().contains(“uio”) 。 我正在使用SQL Server和Hibernate。

如何为存储库设置特定的DataSource?

是否可以将特定的DataSource分配给@Repository ? 我想创建一个测试环境,通常我想使用test-datasource,但是一些CrudRepository应该在不同的DB(生产数据库;只读操作)上运行。 我可以告诉spring哪个数据源用于存储库显式? public interface MyRepository extends CrudRepository {}