我正在学习 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) 我是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) 我有一个使用Spring MVC,Spring Security和Spring Data的Spring应用程序.一切都过去完美无缺,直到我将Spring Data的版本更新1.9.0.RELEASE为2.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) 我目前正在寻找例外的解决方案
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) 我已经为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) 当我使用spring服务并且我想通过spring存储库更新几个数据库表时,我是否需要添加@Transactional来确保我是事务性和回滚还是已经存在?如果是,我是否需要将其添加到类级别或方法?
我正在使用条件和谓词从数据库中获取结果,并且得到了结果列表,并且我试图应用分页和排序,但是它不起作用。请在缺少的地方帮我,这是我的代码:
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)
它不起作用,我想返回一个页面对象。任何帮助表示赞赏。
我正在尝试为数据库表实现正确的搜索功能。我尝试了这种方法:
控制器:
@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) 我在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类。
客户迫使我们使用JdbcTemplate而不是Spring Data Jpa来开发Spring项目。但是,该应用程序在响应速度和传递方面并不关键(它是客户端最终用户的内部Web应用程序)。我们想使用Spring Data Jpa。
问题:是否有一些客观的理由使用JdbcTemplate是因为应用程序的速度快?从我的角度来看,会有不同的瓶颈。
spring-data-jpa ×10
spring ×6
java ×5
spring-boot ×3
hibernate ×2
spring-data ×2
ehcache ×1
jdbctemplate ×1
jpql ×1
jsonb ×1
kotlin ×1
maven ×1
performance ×1
postgresql ×1
spring-mvc ×1
spring-rest ×1