如何在 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
我需要在一个请求中获取关于票的所有信息,还有书名、作者和年份。我已经实现了这个:
我创建接口 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