4Manuals

  • PDF Cloud HOME

Spring Data JPA规范:如何比较日期年份列 Download

    春季启动-Couchbase AbstractCouchbaseConfiguration-如何避免覆盖不必要的方法 我不知道(未解决的编译问题:) 加载数据并推送到未显示的RecyclerView中 调用Model类的函数时出现java.lang.NullPointerException 字符串数组在for循环中初始化时忽略索引0 Spring MVC @ModelAttribute未填充AJAX发布请求 需要建议在Java中使用哪个数据库/存储来存储RaftLogs(实现Raft Consensus Algorithm) Flutter:Java使用或覆盖已弃用的API @ EnableOAuth2Sso和@EnableResourceServer(同一应用程序中的客户端和资源行为) 中断可运行线程的问题

在我的jpa存储库中,我可以查询在特定年份创建的记录:

@Query("select t from Ticket t where year(t.createDate) = ?1")
List<Ticket> findByYearAndSort(int year, Sort sort);

如何在jpa规范中执行此操作?像这样的东西行不通:

static Specification<Ticket> createdIn(int year) {
    return (root, query, cb) -> cb.equal(root.get("year(createDate)"), year);
}

这将引发以下异常:

 InvalidDataAccessApiUsageException: Unable to locate Attribute  with
 the the given name [year(createDate)] on this ManagedType
 [onlineTicket.utility.domain.Ticket]; nested exception is
 java.lang.IllegalArgumentException: Unable to locate Attribute  with
 the the given name [year(createDate)] on this ManagedType
 [onlineTicket.utility.domain.Ticket]]

我的课:

package onlineTicket.utility.domain;

import java.time.*;
import javax.persistence.*;
import javax.validation.constraints.*;
import org.springframework.data.annotation.*;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;


@Entity
@JsonIgnoreProperties(value = {"createTime", "updateTime"}, allowGetters = true)
@EntityListeners(AuditingEntityListener.class)
@Table(name="ticket", schema="utility")
@Access(AccessType.FIELD)
public class Ticket {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @NotBlank
    @Size(min = 6, max = 6)
    @Column(name = "number", unique = true)
    private String number;

    @NotNull
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Column(name = "create_date")
    private LocalDate createDate;

    @Column(name = "user_group")
    @Enumerated(EnumType.STRING)
    private UserGroup group;

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
    @Column(name = "request_time")
    private LocalDateTime requestTime;

    @CreatedDate
    @Column(name = "create_time")
    private LocalDateTime createTime;

    @LastModifiedDate
    @Column(name = "update_time")
    private LocalDateTime updateTime;

    public Ticket(){}

    Ticket(String number, LocalDate createDate) {
        this.number = number;
        this.createDate = createDate;
    }

    public final long getId() {
        return id;
    }

    public final String getNumber() {
        return number;
    }

    public final LocalDate getCreateDate() {
        return createDate;
    }

    public final LocalDateTime getRequestTime() {
        return requestTime;
    }
}

createDate(create_date)列应该没有什么问题,因为我的repository.findByYearAndSort()可以很好地工作。

已解决:
根据建议的链接,我将功能更改为:

return (root, query, builder) -> builder.equal(
        builder.function("YEAR", Integer.class, root.get("createDate")), year);

谢谢大家。

0 个答案:

没有答案



Similar searches
    Xcode 11.3-无法在设备上运行 如何根据另一列的值拆分多列 目的地未解决的承诺 所有游戏中的Fps掉落 Samsung RS2644SL Refrigerator User Manual