【发布时间】:2016-02-26 10:31:51
【问题描述】:
我有三个实体,
@Entity
public class Deck {
@Id
private int id;
private int number;
private String name;
@OneToMany(mappedBy = "deck")
private Set<Lab> labs;
//getter and setter methods
}
@Entity
public class Lab {
@Id
private int id;
private String name;
@ManyToOne
private Deck deck;
@OneToMany(mappedBy = "lab")
private Set<LabBooking> labBooking;
//getter and setter methods
}
@Entity
public class LabBooking {
@Id
private int id;
private Date startTime;
private Date endTime;
@ManyToOne
private Lab lab;
//getter and setter methods
}
以下是 LabRepository,
public interface LabRepository extends CrudRepository<Lab, Integer>{
@Query("SELECT l FROM Lab l JOIN l.labBooking lb WHERE l.deck.id = :deckId AND lb.startTime > '2016-02-24 15:00:00'")
List<Lab> findLabs(@Param("deckId") int deckId);
}
我正在尝试检索牌组中从特定时间被占用的实验室列表。
当我在 MySQL 中执行等效查询 (SELECT * FROM lab l JOIN lab_book lb ON l.id = lb.lab_id WHERE l.deck_id = 9999 AND lb.start_time > '2016-02-24 15:00:00') 时,我得到以下结果
id name deck_id id end_time start_time lab_id
9001 Lab One 9999 5 2016-02-24 17:00:00 2016-02-24 16:00:00 9001
在 spring 应用程序中,我得到以下结果,
[{
"lab_id": 9001,
"lab_name": "Lab One",
"lab_booking": [{
"id": 4,
"start_time": "2016-02-24 15:00:00",
"end_time": "2016-02-24 16:00:00"
}, {
"id": 5,
"start_time": "2016-02-24 16:00:00",
"end_time": "2016-02-24 17:00:00"
}, {
"id": 3,
"start_time": "2016-02-24 14:00:00",
"end_time": "2016-02-23 14:30:00"
}]
}]
Lab 对象应该只包含预订 id 5,而不是显示所有 id。
如果 sql 查询返回 5 条记录,则存储库返回 5 个重复的 Lab 对象。可能是什么问题?
【问题讨论】:
标签: mysql spring-data spring-data-jpa