对于我的项目,我使用fullcalendar和spring。我的sql数据库中的事件数据分为以下列:id-doctor\u id-patient\u id-start-end。
我只想显示与登录用户相关的事件(登录所需的数据包含在另一个名为doctor的sql表中):现在显示的是所有用户的事件。
这是我的控制器类:
@RestController
class EventController {
@Autowired
private EventJpaRepository eventRepository;
@RequestMapping(value="/allevents", method=RequestMethod.GET)
public List<Event> events() {
return eventRepository.findAll();
}
@RequestMapping(value="/events", method=RequestMethod.GET)
public List<Event> getEventsInRange(@RequestParam(value = "start", required = true) String start,
@RequestParam(value = "end", required = true) String end, @RequestParam(value = "title", required = true) String title) {
Date startDate = null;
Date endDate = null;
SimpleDateFormat inputDateFormat=new SimpleDateFormat("yyyy-MM-dd");
try {
startDate = inputDateFormat.parse(start);
} catch (ParseException e) {
throw new BadDateFormatException("bad start date: " + start);
}
try {
endDate = inputDateFormat.parse(end);
} catch (ParseException e) {
throw new BadDateFormatException("bad end date: " + end);
}
LocalDateTime startDateTime = LocalDateTime.ofInstant(startDate.toInstant(),
ZoneId.systemDefault());
LocalDateTime endDateTime = LocalDateTime.ofInstant(endDate.toInstant(),
ZoneId.systemDefault());
return eventRepository.findByDateBetween(startDateTime, endDateTime);
}
}
这是事件存储库:
@Repository
interface EventJpaRepository extends JpaRepository<Event, Long> {
@Query("select b from Event b where b.start >= ?1 and b.end <= ?2")
public List<Event> findByDateBetween(LocalDateTime start, LocalDateTime end);
}
这是我的html页面中的fullcalendar脚本:
<script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
initialView : 'dayGridMonth',
headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
locale: 'it',
editable : false,
eventLimit : true, // allow "more" link when too many events
events : {
url : '/allevents',
type : 'GET',
error : function() {
alert('there was an error while fetching events!');
},
}
});
calendar.render();
});
</script>
1条答案
按热度按时间omjgkv6w1#
你的代码缺少一些东西。现在,查询返回一个时间范围内的所有事件。要将此限制为仅登录用户,您需要加入
Doctor
查询中具有用户id的表。不知道会话是如何存储的,或者Doctor
表看起来,您的查询可能需要更新如下内容:我还没测试过,但这会让你朝着正确的方向前进。
编辑:对不起,我已经有一段时间没有写jpa了。我已经更新了上面的查询,您需要一个
上
Doctor
对象。和一个上
Event
. 然后,您应该能够在从会话中检索到查询之后,将doctor\u id传递给该查询。在springdatajpa中连接两个表实体的问题提供了一些关于如何在jpa查询中连接表的好信息。