Tag: spring data

spring-data:不是托管类型:类java.lang.Object

我昨天开始使用spring-data项目,并试图将测试添加到我创建的存储库中。 项目结构看起来像 persistence/pom.xml src/main/java/ ApplicationConfig BaseRepository Network src/main/test/BaseRepositoryTest ApplicationConfig看起来像 @Configuration @ComponentScan @EnableJpaRepositories public class ApplicationConfig { @Bean public DataSource dataSource() { final EmbeddedDatabaseBuilder embeddedDatabaseBuilder = new EmbeddedDatabaseBuilder(); embeddedDatabaseBuilder.setType(EmbeddedDatabaseType.H2); return embeddedDatabaseBuilder.build(); } @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { final HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter(); jpaVendorAdapter.setDatabase(Database.H2); jpaVendorAdapter.setGenerateDdl(true); final LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); localContainerEntityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter); localContainerEntityManagerFactoryBean.setPackagesToScan(getClass().getPackage().getName()); localContainerEntityManagerFactoryBean.setDataSource(dataSource()); return localContainerEntityManagerFactoryBean; […]

如何限制角色对Spring Data REST投影的访问?

在使用Spring Data JPA和Spring Data REST的应用程序中,假设您有一个这样的实体类: @Entity public class Person { @Id @GeneratedValue private int id; private String name; @JsonIgnore private String superSecretValue; … } 我们希望Spring Data REST为superSecretValue公开所有这个实体的字段EXCEPT,因此我们用@JsonIgnore注释了该字段。 但是,在某些情况下,我们要访问superSecretValue ,因此我们创建一个投影,返回所有字段,包括: @Projection(name = “withSecret”, types = {Person.class}) public interface PersonWithSecret { String getName(); String getSuperSecretValue(); } 真棒。 所以现在我们可以访问包含 superSecretValue字段的Person实体,如下所示: curl http://localhost:8080/persons?projection=withSecret 我的问题是我们如何确保这一预测 ? 我们如何配置这样的东西,以便任何人都可以在没有 superSecretValue字段的情况下检索Person实体……但只有具有特定角色的人(例如, ROLE_ADMIN )才能使用投影来检索隐藏字段? […]

如何使用Spring-data-Redis实现Redis Multi-Exec

所有Spring配置都已正确编写。 非Multi-Exec Redis操作非常有效。 @Autowired @Qualifier(“stringRedisTemplate”) StringRedisTemplate template; void test(){ template.multi(); template.boundValueOps(“somevkey”).increment(1); template.boundZSetOps(“somezkey”).add(“zvalue”, timestamp); template.exec(); } 通过Junit Test运行上面的代码后,抛出了exception。 org.springframework.data.redis.RedisSystemException: Unknown exception; nested exception is org.springframework.data.redis.RedisSystemException: Unknown jedis exception; nested exception is java.lang.NullPointerException at org.springframework.data.redis.connection.jedis.JedisUtils.convertJedisAccessException(JedisUtils.java:93) at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.translateExceptionIfPossible(JedisConnectionFactory.java:155) at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:58) at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:163) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at $Proxy66.appendUserStream(Unknown Source) at com.uniu.test.repository.StreamCacheRepositoryTest.testAppendUserStream(StreamCacheRepositoryTest.java:23) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) […]

Spring Data动态查询

我正在尝试使用spring数据设置动态查询,基本上我有一堆具有一系列特征的数组,我需要根据这些特征组装查询,几乎就像“WHERE特征= A AND特征= B AND特征= C“但特征量可能不同。 我注意到我可以使用@Query注释但是可以将@Query的结果分页吗? 有没有其他方法可以实现这一目标? Page findDistinctByNameContainingAndOrganizationAndCharacteristicsInOrIngredientsContainingAndOrganizationAndCharacteristicsInOrDescriptionContainingAndOrganizationAndCharacteristicsInAllIgnoreCase( String name, Organization organization1, List characteristic1, String ingredients, Organization organization2, List characteristic2, String description, Organization organization3, List characteristic3, Pageable pageable);

我应该使用Java 8默认方法来手动实现Spring Data存储库方法吗?

当使用新的Spring Data Evans版本时,能够使用java 8附带的一些好东西是很好的。其中一个是接口中的默认实现。 下面的存储库使用QueryDSL使查询类型安全。 我的问题是,在我写这篇文章之前,我使用了一个单独的UserRepositoryCustom接口的模式用于findByLogin ,然后是另一个类UserRepositoryImpl ,在该类中,我将使用@PersistenceContext来获取当前的EntityManager 。 如果没有课程,如何获得EntityManager ? 它甚至可能吗? @Repository public interface UserRepository extends JpaRepository { final QUser qUser = QUser.user; // How do I get the entityManager since this is a interface, i cannot have any variables? //@PersistenceContext //EntityManager entityManager; public default Optional findByLogin(String login) { JPAQuery query = new JPAQuery(entityManager); […]

有没有办法在Spring Data @Query注释值中使用常量?

我不想硬编码常量值,我宁愿通过引用变量指定它们。 例如,而不是写下一个查询: @Query(value = “SELECT u FROM UserModel u WHERE u.status = 1”) ..我想提取硬编码值’1’并写出如下内容: @Query(value = “SELECT u FROM UserModel u WHERE u.status = UserModel.STATUS_ACTIVE”) //doesn’t compile 有没有办法像spring-data查询中的第二个例子那样指定常量?

查询方法public abstract java.util.List的validation失败

我有一个基本的SpringBoot应用程序。 使用Spring Initializer,JPA,嵌入式Tomcat,Thymeleaf模板引擎和包作为可执行的JAR文件。 SpringBoot的版本是2.0.1.RELEASE。 我已经创建了一个使用此方法从CrudRepository扩展的类存储库 @Query(“select us.priceAlertsTapas.tapa from User us left join us.priceAlertsTapas pat left join pat.tapa tapa where pat.priceAlert = ?1”) List tapasByUserPriceAlert (PriceAlert pa); 但是当我启动项目时,我收到了这个错误: Validation failed for query for method public abstract java.util.List at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:93) at org.springframework.data.jpa.repository.query.SimpleJpaQuery.(SimpleJpaQuery.java:63) at org.springframework.data.jpa.repository.query.JpaQueryFactory.fromMethodWithQueryString(JpaQueryFactory.java:76) at org.springframework.data.jpa.repository.query.JpaQueryFactory.fromQueryAnnotation(JpaQueryFactory.java:56) at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$DeclaredQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:139) at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:206) at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:79) at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lookupQuery(RepositoryFactorySupport.java:553) at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lambda$mapMethodsToQuery$1(RepositoryFactorySupport.java:546) at […]

如何使用Spring Data JPA查询Map值?

所以我的数据库模型是这样的:我有Store ,每个Store都有一个本地化的名称。 所以我选择将本地化名称表示为这样的Map : public class Store { private Map name; } 你可以看到它是的Map,其中LocalizedValue是这样的类: @Embeddable public class LocalizedValue { @Column(name = “value”) private String value; } 这一切都很棒。 但是我遇到了一个问题,我想查询我的Spring Data JPA存储库并查找具有给定英文名称的所有商店。 所以我的存储库方法如下所示: Store findByName(Map.Entry name); 但它抛出了这个exception: 2014-10-07 23:49:55,862 [qtp354231028-165] ERROR: Parameter value [en=Some Value] did not match expected type [com.test.LocalizedValue(n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [en=Some […]

Spring Boot测试中的MockBean注释导致NoUniqueBeanDefinitionException

我在使用@MockBean注释时遇到问题。 文档说MockBean可以替换上下文中的bean,但是我在unit testing中得到NoUniqueBeanDefinitionException。 我看不出如何使用注释。 如果我可以模拟repo,那么显然会有多个bean定义。 我正在按照此处的示例进行操作: https : //spring.io/blog/2016/04/15/testing-improvements-in-spring-boot-1-4 我有一个mongo存储库: public interface MyMongoRepository extends MongoRepository { MyDTO findById(String id); } 泽西岛资源: @Component @Path(“/createMatch”) public class Create { @Context UriInfo uriInfo; @Autowired private MyMongoRepository repository; @POST @Produces(MediaType.APPLICATION_JSON) public Response createMatch(@Context HttpServletResponse response) { MyDTO match = new MyDTO(); match = repository.save(match); URI matchUri = uriInfo.getBaseUriBuilder().path(String.format(“/%s/details”, match.getId())).build(); […]

如何使用MongoRepository与spring数据一起使用查询注释时显示查询

我在spring boot中使用MongoRepository来访问mongo: public interface MongoReadRepository extends MongoRepository { @Query(value = “{$where: ‘this.name == ?0’}”, count = true) public Long countName(String name); } 它可以工作,但我想知道它访问mongo的确切查询 怎么做? 我尝试在以下属性中添加一些配置: logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG logging.level.org.springframework.data.mongodb.repository.Query=DEBUG 并且不工作。 有人可以帮忙吗?