如何使用休眠模式从两个MySQL表中获取数据

时间:2018-12-30 17:00:13

标签: java json spring hibernate

在我的数据库中,我有两个表airportcalendar通过快捷键airport_id连接。我想从确定的airport_id=273

的两个表中获取数据的json响应

enter image description here

例如,我想使用airport_id获取机场的数据,并使用快捷键airport_id的Calendar等于273。实际上,我从localhost:8080得到了空响应。我没有出现任何错误,只是空白页,如下图所示。我做错了什么?预先谢谢你!

enter image description here

Airport.java

@Entity
@Table(name = "airport")
public class Airport {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer airport_id;

    @Column(name = "departureAirport")
    private String departureAirport;

    @Column(name = "destinationAirport")
    private String destinationAirport;

    @OneToMany(mappedBy = "airport")
    @JsonManagedReference("airport")
    private List<Calendar> calendars; ....

Calendar.java

@Entity
@Table(name = "calendar")
public class Calendar {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer calendar_id;

@Column(name = "departureTime")
private Time departureTime;

@Column(name = "destinationTime")
private Time destinationTime;

@ManyToOne(targetEntity = Airport.class)
@JoinColumn(name = "airport_id")
@JsonBackReference("airport")
private Airport airport; ....

CalendarController.java

public class CalendarController {

@Autowired
CalendarService calendarService;

@Autowired
AirportService airportService;

@GetMapping(value = "/search/{airport_id}")
public List<Calendar> getCalendars(@PathVariable("airport_id") Integer airport_id) {
    Airport airport = airportService.findOne(airport_id);
    return calendarService.findOne(airport);
}}

CalendarRepository.java

 public interface CalendarRepository extends CrudRepository<Calendar, Integer> {

 Calendar getOne(int calendar_id);
 List<Calendar> findByAirport(Airport airport_id);
 }

CalendarService.java

public interface CalendarService {

List<Calendar> findOne(Airport airport_id);
}

CalendarServiceImpl.java

@Service
public class CalendarServiceImpl implements CalendarService {

@Autowired
CalendarRepository repository;

@Autowired
AirportRepository airportRepository;

@Override
public List<Calendar> getCalendars(Integer airport_id) {
    Airport airport = airportRepository.getOne(airport_id);
    return repository.findByAirport(airport);
}}

更新

AirpostService.java

public interface AirportService {

Airport findOne(int airport_id);
}

AirportRepository.java

public interface AirportRepository extends CrudRepository<Airport, Integer> {

Airport getOne(Integer airport_id);
}

1 个答案:

答案 0 :(得分:0)

问题不是您的休眠状态,而是您的控制器。您只需要在方法中添加@Responsebody批注即可。 @ResponseBody注释告诉控制器返回的对象会自动序列化为JSON。

@GetMapping(value = "/search/{airport_id}")
@ResponseBody
public List<Calendar> getCalendars(@PathVariable("airport_id") Integer airport_id) {
    Airport airport = airportService.findOne(airport_id);
    return calendarService.findOne(airport);
}}