我正在使用 Spring Boot 應用程式使用 JPA 存盤庫創建稱為宿舍管理系統的應用程式。我增加了一間旅館。然后我添加了房間,然后更新旅館以更新連接表條目。現在我正在嘗試取宿舍。無法獲取宿舍資料,它顯示:
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:145) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:107) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
lots of line.............
我已經在 gitHub 上上傳了這個專案:https ://github.com/aniketkadu0/hms_new.git
旅舍.java
@Table(name = "hostels")
public class Hostel implements Cloneable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
int hostelId;
String hostelName;
String hostelAddress;
String contactPersonName;
String contactPersonNumber;
@OneToMany
@JoinTable(joinColumns = @JoinColumn(
name = "hostel_id",
referencedColumnName = "hostelId"
),
inverseJoinColumns = @JoinColumn(
name = "room_number",
referencedColumnName = "roomNumber"
))
List<Room> rooms;
@OneToOne
Mess mess;
@OneToMany
List<Notice> notices;
}
房間.java
@Table(name = "rooms")
public class Room {
@Id
int roomNumber;
int noOfOccupants;
@OneToOne
RoomDetail roomDetail;
@OneToOne
Hostel hostel;
@OneToMany
List<Student> student;
}
RoomDetail.java
@Entity
public class RoomDetail {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
int roomDetailId;
String roomName;
int price;
int maxOccupants;
}
旅館 JSON
{
"hostelId": 1,
"hostelName": "Hostel no. 1 Boys Hostel",
"hostelAddress": "building no. 5",
"contactPersonName": "XYZ",
"contactPersonNumber": "9999977777",
"rooms": null,
"mess": null,
"notices": null
}
房間 JSON
{
"noOfOccupants" : 0,
"roomDetail" : {
"roomDetailId" : 1
} ,
"hostel" : {
"hostelId" : 1
}
}
管理服務.java
@Service
public class AdminService {
@Autowired
HostelDAO hostelDAO;
@Autowired
RoomDAO roomDAO;
@Autowired
RoomDetailDAO roomDetailDAO;
public Hostel addHostel(Hostel hostel) {
return hostelDAO.save(hostel);
}
public Room addRoom(Room room,int qty,int firstRoomNumber){
Optional<Hostel> hostel = hostelDAO.findById(room.getHostel().getHostelId());
Optional<RoomDetail> roomDetail = roomDetailDAO.findById(room.getRoomDetail().getRoomDetailId());
room.setHostel(hostel.get());
room.setRoomDetail(roomDetail.get());
List<Room> rooms = new ArrayList<>();
room.setRoomNumber(firstRoomNumber);
System.out.println(room);
firstRoomNumber--;
int i = 1;
while( i <= qty) {
Room newRoom = new Room(room.getRoomNumber(),
room.getNoOfOccupants(),room.getRoomDetail(),
room.getHostel(),room.getStudent());
newRoom.setRoomNumber(firstRoomNumber i);
rooms.add(newRoom);
i ;
}
roomDAO.saveAll(rooms);
hostel.get().setRooms(rooms);
hostelDAO.save(hostel.get());
return null;
}
public List<Hostel> getHostelData() {
return hostelDAO.findAll();
}
}
uj5u.com熱心網友回復:
序列化 Hostel 的問題在于您的 Hostel 的房間指向同一個 Hostel。有很多方法可以告訴您的 JSON 序列化程式如何處理它。假設您使用的是 Jackson,最簡單的方法可能是在不需要序列化的一側添加 @JsonIgnore 注釋。IE:
@Table(name = "rooms")
public class Room {
@Id
int roomNumber;
int noOfOccupants;
@OneToOne
RoomDetail roomDetail;
@OneToOne
@JsonIgnore
Hostel hostel;
@OneToMany
List<Student> student;
}
您將不得不查看所有回圈參考——實際上是整個圖表——并決定在通過 REST 呼叫獲取時您真正想要序列化的內容,以及您的客戶端可能需要如何處理資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/524166.html
