【发布时间】:2020-07-04 15:21:32
【问题描述】:
我正在为分页操作创建查询。但是当我给出排序列时,答案是错误的。所有已完成的字段都成真。数据库中的已完成字段不正确。如果没有排序列,则结果正确。当您不在 Pageable 中进行排序并向查询添加顺序时,同样的问题仍然存在。
当我将 todoitem0_.item_desc as item_des4_0_ 从 询问。但我无法理解问题
当描述字段定义为 变量(255)。但我需要定义 @Lob
控制器
@RestController
@CrossOrigin
@RequestMapping("/api/item")
public class TodoItemController {
@GetMapping(value = "/list")
private TodoItemDto getUserItems(Authentication authentication,
@RequestParam("page") int page, @RequestParam("sizePerPage") int sizePerPage){
Pageable pageable = PageRequest.of(page,sizePerPage, Sort.by("createdAt").descending());
return todoItemService.getUserItems(((CustomUserDetails) authentication.getPrincipal()).getId(),pageable);
}
}
服务
@Service
@Transactional
public class TodoItemServiceImpl implements TodoItemService {
@Override
public TodoItemDto getUserItems(long userId, Pageable pageable){
Page<TodoItem> itemPage = todoItemRepository.findUserItems(userId, pageable);
TodoItemDto dto = new TodoItemDto();
dto.setContent(itemPage.getContent());
dto.setTotal((int)itemPage.getTotalElements());
return dto;
}
}
存储库
public interface TodoItemRepository extends JpaRepository<TodoItem, Integer> {
@Query(value = "SELECT i FROM TodoItem i "
+ "INNER JOIN Todo t ON t.user.id = ?1 "
+ "WHERE i.todo.id = t.id ")
Page<TodoItem> findUserItems(long userId, Pageable pageable);
}
实体
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "items")
public class TodoItem{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@NotBlank(message = "Item name not be blank")
@Column(nullable = false, unique = true)
private String itemName;
@NotBlank(message = "Item description not be blank")
@Lob
private String itemDesc;
@ManyToOne
@JoinColumn(name = "todoId")
private Todo todo;
@Column(nullable = false)
private boolean completed = false;
@Temporal(TemporalType.TIMESTAMP)
@Column(nullable=false, updatable = false)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd / MM / yyyy")
private Date createdAt;
@PrePersist
protected void onCrearedAt() {
this.createdAt = new Date();
}
}
休眠 Sql 查询
select
todoitem0_.id as id1_0_,
todoitem0_.completed as complete2_0_,
todoitem0_.created_at as created_3_0_,
todoitem0_.item_desc as item_des4_0_,
todoitem0_.item_name as item_nam5_0_,
todoitem0_.todo_id as todo_id6_0_
from
items todoitem0_
inner join
todo todo1_
on (
todo1_.user_id=?
)
where
todoitem0_.todo_id=todo1_.id
order by
todoitem0_.created_at desc limit ?
【问题讨论】:
-
@KavithakaranKanapathippillai 我试过这个。但问题仍然存在
-
Not null 成真(1)
标签: java mysql spring-boot jpa spring-data-jpa