如何在 spring-data-jpa 中使用投影?

How use projections in spring-data-jpa?

我需要在一个请求中获取关于票的所有信息,还有书名、作者和年份。我已经实现了这个: 我创建接口 TicketWithBookView

public interface TicketWithBookView {
    Date getGiveAway();
    Long getReaderId();
    Date getTake();

    interface Book {
        String getAuthor();
        String getName();
        Integer getYearCreation();
    }
}

我的实体TicketEntity

@Data
@Entity
@Table(name = "ticket")
@NoArgsConstructor
@AllArgsConstructor
public class TicketEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(nullable = false)
    private Long readerId;
    @Column(nullable = false)
    private Long bookId;
    @Column(nullable = false)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
    private Date take;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
    private Date giveAway;
}

第二个实体BookEntity;

@Entity
@Data
@NoArgsConstructor
@Table(name = "book")
public class BookEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String author;
    private Integer yearCreation;
    private Integer count;
}

和存储库

@Repository
public interface TicketRepository extends CrudRepository<TicketEntity, Long> {
    List<TicketWithBookView> findAllByGiveAwayIsNullAndTakeIsNotNull();
}

可能问题出在方法名称

中的AAnd

findAllByGiveAwayIsNullAAndAndTakeIsNotNull

添加你得到的错误信息,这样会更容易找到问题

不可能)投影用于 select 来自查询的数据,而不是用于从其他表获取数据。 您可以从另一个 table 上传数据并在 service.

中创建一个新的 model