【问题标题】:How to get data from two MySQL tables using hibernate如何使用休眠从两个 MySQL 表中获取数据
【发布时间】:2018-12-30 17:00:12
【问题描述】:

在我的数据库中,我有两个表 airport 和 calendar 由前八键 airport_id 连接。我想从两个表中为确定的airport_id=273获取数据的json响应

例如,我想使用 airport_id 获取 Airport 的数据,使用前八键 airport_id 获取日历的数据等于 273。实际上,我从 localhost:8080 得到了空响应。我没有收到任何错误,只是一个空白页,如下图所示。我做错了什么?提前谢谢!

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; ....

日历.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);
}

【问题讨论】:

    标签: java json spring hibernate


    【解决方案1】:

    问题不是你的 Hibernate,而是你的 Controller。您只需将 @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);
    }}
    

    【讨论】:

    • 很遗憾,一切都没有改变
    • 您能发布您的存储库的代码吗?也许您返回的是一个空列表,否则它应该可以工作。
    • 我指的是 AirportRepository 实现的代码。只是为了排除那个。另外,当您调试代码时,calendarService.findOne(airport) 是否返回一个空列表?
    猜你喜欢
    • 1970-01-01
    • 2016-07-24
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    相关资源
    最近更新 更多