标签: spring-data-jpa

@Cacheable "注解类型不适用于此类声明"

我正在学习 Spring 和 Data JPA。我有 Ehcache 的问题。我想缓存我从数据库返回一些记录的方法之一的返回值。这是一个预先配置了 Ehcache 实例的练习(我假设)。问题是我不能使用注释@Cacheable 将我的方法标记为应该缓存其返回值的方法。我收到一个不兼容的类型编译错误(必需:boolean,找到:String)。这是我的服务层中的一个类,我认为我应该将 @Cacheable 放在这里(对吗?):

package wad.datatables.service;

import javax.persistence.Cacheable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import wad.datatables.domain.Book;
import wad.datatables.repository.BookRepository;
import wad.datatables.view.DataTablesResponse;

@Service
public class JpaDataTablesBookService implements DataTablesBookService {

    @Autowired
    private BookRepository bookRepository;    

    @Override
    @Transactional(readOnly = true) 
    @Cacheable("books")
    public DataTablesResponse getBooks(String queryString) {
        Pageable pageable = new PageRequest(0, 10, Sort.Direction.ASC, "title");

        Page<Book> page = bookRepository.findByTitleContaining(queryString, pageable);

        DataTablesResponse response = new DataTablesResponse();
        response.setTotalRecords(page.getTotalElements());
        response.setTotalDisplayRecords(page.getNumberOfElements());
        response.setData(page.getContent());

        return response; …
Run Code Online (Sandbox Code Playgroud)

spring ehcache spring-data-jpa

0
推荐指数
1
解决办法
3514
查看次数

无法使用root将pageRequest强制转换为可分页

我是Java Spring初学者。我正在创建一个博客项目,其中需要加载5个最新帖子。我遇到了这个问题,我不知道如何解决//忽略我//忽略我///忽略我//忽略我//忽略我//忽略我//忽略我

import java.awt.print.Pageable;
import java.util.List;

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;

public interface PostRepository extends CrudRepository<Post, Long>{
    @Query("SELECT p FROM Post p LEFT JOIN FETCH p.author ORDER BY p.date DESC")
    List<Post> findLatest5Posts(Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)

PostServicesImp:

import java.awt.print.Pageable;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import havan.blog.demo.models.Post;
import havan.blog.demo.models.PostRepository;

@Service
@Primary
public class PostServicesImpl implements PostServices{
    @Autowired
    private PostRepository postRepo;

    @Override
    public List<Post> findAll() {
        // TODO Auto-generated method stub
        return (List<Post>) this.postRepo.findAll();
    }

    @Override
    public List<Post> findLatest5() { …
Run Code Online (Sandbox Code Playgroud)

java spring-mvc spring-data-jpa

0
推荐指数
1
解决办法
1172
查看次数

启动Spring应用程序时出错:bean的初始化失败; 嵌套异常是AbstractMethodError

我有一个使用Spring MVC,Spring Security和Spring Data的Spring应用程序.一切都过去完美无缺,直到我将Spring Data的版本更新1.9.0.RELEASE2.x.

这是无法创建的存储库bean(BeanCreationException):

@Repository // Enables exception translation
public interface UsuarioRepository extends CrudRepository<Usuario, Long> {

    @Query("SELECT u FROM Usuario u WHERE LOWER(u.login) = LOWER(:login)")
    Usuario findByLogin(@Param("login") String login);

    @Query(value = "SELECT * FROM Usuario WHERE fl_ativo = true", nativeQuery = true)
    Iterable<Usuario> findAllActives();

}
Run Code Online (Sandbox Code Playgroud)

这是pom.xml(Maven):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!-- Artifact details -->
    <modelVersion>4.0.0</modelVersion>
    <groupId>br.com.nooder</groupId>
    <artifactId>portal-jstl</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <!-- Properties -->
    <properties>
        <project.build.version.log4j>2.8.2</project.build.version.log4j>
        <project.build.version.junit>4.12</project.build.version.junit>
        <project.build.version.slf4j>1.7.25</project.build.version.slf4j>
        <project.build.version.hibernate>5.2.12.Final</project.build.version.hibernate>
        <project.build.version.spring>4.3.8.RELEASE</project.build.version.spring>
        <project.build.version.spring.data>2.0.2.RELEASE</project.build.version.spring.data>
        <project.build.version.spring.security>4.2.2.RELEASE</project.build.version.spring.security>
    </properties> …
Run Code Online (Sandbox Code Playgroud)

java spring maven spring-data spring-data-jpa

0
推荐指数
1
解决办法
3920
查看次数

将Postgres JSONB查询与Spring Data和bind参数一起使用时失败,并显示InvalidDataAccessApiUsageException

我目前正在寻找例外的解决方案

org.springframework.dao.InvalidDataAccessApiUsageException: Parameter with that position [1] did not exist;
Run Code Online (Sandbox Code Playgroud)

我当前的@Query注释是:

@Query(
    nativeQuery = true, 
    value = "SELECT * FROM thgcop_order_placement WHERE \"order_info\" @> '{\"parentOrderNumber\":\" :param \"}'")
Run Code Online (Sandbox Code Playgroud)

我想它position [1] did not exist来自双引号加双引号加单引号。

我该如何进行这项工作?

该查询正在使用Postgres JSONB数据类型。列定义为ORDER_INFO JSONB

以下本地查询在Postgres客户端中可以正常运行:

SELECT * FROM thgcop_order_placement
WHERE "order_info" @> '{"parentOrderNumber":"ORD123"}'
Run Code Online (Sandbox Code Playgroud)

postgresql spring hibernate spring-data-jpa jsonb

0
推荐指数
1
解决办法
1091
查看次数

Spring Data JPA:DML操作不支持

我已经为Amazon Aurora数据库编写了一个查询,以在我的接口CrudRepositoryExtended中删除一些对象,但是当我执行该查询时,它将引发异常!

@Transactional
@Query("delete from HotelPrice hp where hp.updateDate < ?1 ")
void deletePriceOlderThan   (Date date);
Run Code Online (Sandbox Code Playgroud)

异常跟踪跟踪:

Caused by: java.lang.IllegalStateException: org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations [delete from com.gamesa.backend.persistence.domain.backend.HotelPrice hp where hp.updateDate < ?1 ]
    at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:554)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution$SingleEntityExecution.doExecute(JpaQueryExecution.java:208)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:87)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:116)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:106)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:499)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:477)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:56)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
    ... 35 common frames omitted
Run Code Online (Sandbox Code Playgroud)

jpql spring-data spring-data-jpa spring-boot amazon-aurora

0
推荐指数
1
解决办法
1943
查看次数

Spring @Service是事务性的吗?

当我使用spring服务并且我想通过spring存储库更新几个数据库表时,我是否需要添加@Transactional来确保我是事务性和回滚还是已经存在?如果是,我是否需要将其添加到类级别或方法?

java spring spring-transactions spring-data-jpa

0
推荐指数
1
解决办法
4207
查看次数

如何在JPA中处理分页(条件和谓词)

我正在使用条件和谓词从数据库中获取结果,并且得到了结果列表,并且我试图应用分页和排序,但是它不起作用。请在缺少的地方帮我,这是我的代码:

private Page<Books> getFiltereBooks(Params params,
            PageRequest sortOrder) {
        CriteriaBuilder builder =  em.getCriteriaBuilder();
        CriteriaQuery<Books> criteria = builder.createQuery(Books.class);
        Root<Books> booksRoot = criteria.from(Books.class);
        List<Predicate> predicates = new ArrayList<Predicate>();


            predicates.add(builder.equal(booksRoot.get("id"), params.getRequestId()));


            predicates.add(builder.like(builder.lower(booksRoot.get("name")), 
                    "%" + params.getName().toLowerCase() + "%"));


        criteria.where(builder.and(predicates.toArray( new Predicate[predicates.size()])));

            criteria.orderBy(builder.desc(booksRoot.get("id")));

        List<Books> result = em.createQuery(criteria).getResultList();
        int total = result.size();
        Page<Books> result1 = new PageImpl<>(result, sortOrder, total);
        return result1;
    }
Run Code Online (Sandbox Code Playgroud)

当我使用此代码时:

Page<Books> result1 = new PageImpl<>(result, sortOrder, total);
Run Code Online (Sandbox Code Playgroud)

它不起作用,我想返回一个页面对象。任何帮助表示赞赏。

java hibernate hibernate-criteria spring-data-jpa

0
推荐指数
1
解决办法
1757
查看次数

实现针对JPA和Spring Boot的搜索功能

我正在尝试为数据库表实现正确的搜索功能。我尝试了这种方法:

控制器:

    @GetMapping
    public Page<TransactionDTO> find(TransactionFilterDTO filter, Pageable page) {
        return searchRepository
                .findTransactionsByFilter(mapper.toFilter(filter), page)
                .map(mapper::toDTO);
    }
Run Code Online (Sandbox Code Playgroud)

Filer DTO:

public class TransactionFilterDTO {

    private String name;

    private Integer id;

    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    private LocalDateTime from;

    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    private LocalDateTime to;
    ... // getters and setter
}
Run Code Online (Sandbox Code Playgroud)

搜索实现:

@Repository
public class TransactionSearchRepositoryImpl implements TransactionSearchRepository {

    @Autowired
    private TransactionRepository transactionRepository;

    @Autowired
    private TransactionSpecification specification;

    @Override
    public Page<Transaction> findTransactionsByFilter(TransactionFilter filter, @Nullable Pageable page) {


        List<Transaction> transactions = transactionRepository
                .findAll(specification.getFilter(filter));

        int totalCount = transactions.size(); …
Run Code Online (Sandbox Code Playgroud)

java spring spring-data-jpa spring-boot

0
推荐指数
1
解决办法
1811
查看次数

公开属性和Kotlin数据类的接口

我在Kotlin中有一个数据类:

data class Image (val name: String, val url: URL) {}
Run Code Online (Sandbox Code Playgroud)

我想通过REST(Spring Boot,JPA)提供这些图像的列表,但我只希望提供某些属性(在本示例中仅是名称,而不是URL)。从我阅读的内容中,我需要使用投影-仅使用'getName'函数定义接口:

interface HasName {
  fun getName () : String
}
Run Code Online (Sandbox Code Playgroud)

..然后设置数据类以实现此目的,并让RestController服务于HasNames而不是Images:

@GetMapping("/images")
fun getImages () : List <HasName> {
  return imageService.getImages()
}
Run Code Online (Sandbox Code Playgroud)

(或者那就是我在Java中要做的事情)。

但是,如果我在Kotlin中这样做:

data class Image (val name: String, val url: URL) : HasName {}  
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

意外覆盖:以下声明具有相同的JVM签名(getUrl()Ljava / net / URL;):

公共最终乐趣<get-url >():在com.figmentsignage.server.data.campaign.Image中定义的URL公共抽象乐趣getUrl():在com.figmentsignage.server.data.campaign.Image中定义的URL

有没有解决此问题的简单方法?我可以给该方法一个不同的名称,然后在Image类中重新定义它,但这有点混乱。或者,我可以在界面中定义'name'变量,然后在Image中覆盖它,这又很麻烦。理想情况下,我希望尽可能少地更改Image类。

spring-data-jpa kotlin spring-boot spring-rest

0
推荐指数
1
解决办法
53
查看次数

Spring JdbcTemplate比Spring Data Jpa快吗?

客户迫使我们使用JdbcTemplate而不是Spring Data Jpa来开发Spring项目。但是,该应用程序在响应速度和传递方面并不关键(它是客户端最终用户的内部Web应用程序)。我们想使用Spring Data Jpa。

问题:是否有一些客观的理由使用JdbcTemplate是因为应用程序的速度快?从我的角度来看,会有不同的瓶颈。

performance spring jdbctemplate spring-data-jpa

0
推荐指数
1
解决办法
50
查看次数