gpt4 book ai didi

java - 如何防止 hibernate 中的无限循环

转载 作者:太空宇宙 更新时间:2023-11-04 06:49:49 24 4
gpt4 key购买 nike

我有一个使用此 API 的休息服务器和客户端。我有一个酒店列表,它一直很好地通过,直到我向其他实体添加了双向依赖项。之后,我开始收到无穷无尽的实体数组,这些实体只是重复数据库中的同一行。

这是我使用 hibernate 的第一个项目,所以我可能犯了一些新手的小错误。

Schema

酒店:

@Entity
@Table(name = "hotels", schema = "", catalog = "mydb")
public class HotelsEntity implements HospitalityEntity{
private int idHotel;
private String name;
private String region;
private String description;

//私有(private)byte[]照片;

private HotelPropertyEntity property;
private List<RoomEntity> rooms;


@OneToOne(mappedBy = "hotel")
public HotelPropertyEntity getProperty() {
return property;
}

public void setProperty(HotelPropertyEntity property) {
this.property = property;
}

@OneToMany(mappedBy = "hotel")
public List<RoomEntity> getRooms() {
return rooms;
}

public void setRooms(List<RoomEntity> rooms) {
this.rooms = rooms;
}

@Id
@Column(name = "id_hotel", unique = true)
@GeneratedValue(strategy=GenerationType.AUTO)
public int getIdHotel() {
return idHotel;
}

public void setIdHotel(int idHotel) {
this.idHotel = idHotel;
}

@Basic
@Column(name = "name")
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Basic
@Column(name = "region")
public String getRegion() {
return region;
}

public void setRegion(String region) {
this.region = region;
}

@Basic
@Column(name = "description")
public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

酒店属性(property)

@Entity
@Table(name = "hotel_property", schema = "", catalog = "mydb")
public class HotelPropertyEntity {
private int idHotelProperty;
private byte hasPool;
private byte hasTennisCourt;
private byte hasWaterslides;

private HotelsEntity hotel;


@Id
@Column(name = "id_hotel_property", unique = true)
@GeneratedValue(strategy=GenerationType.AUTO)
public int getIdHotelProperty() {
return idHotelProperty;
}

public void setIdHotelProperty(int idHotelProperty) {
this.idHotelProperty = idHotelProperty;
}

@Basic
@Column(name = "has_pool", columnDefinition = "BIT", length = 1)
public byte getHasPool() {
return hasPool;
}

public void setHasPool(byte hasPool) {
this.hasPool = hasPool;
}

@Basic
@Column(name = "has_tennis_court", columnDefinition = "BIT", length = 1)
public byte getHasTennisCourt() {
return hasTennisCourt;
}

public void setHasTennisCourt(byte hasTennisCourt) {
this.hasTennisCourt = hasTennisCourt;
}

@Basic
@Column(name = "has_waterslides", columnDefinition = "BIT", length = 1)
public byte getHasWaterslides() {
return hasWaterslides;
}

public void setHasWaterslides(byte hasWaterslides) {
this.hasWaterslides = hasWaterslides;
}

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id_hotel_property")
public HotelsEntity getHotel() {
return hotel;
}

public void setHotel(HotelsEntity hotel) {
this.hotel = hotel;
}

房间:

@Entity
@Table(name = "room", schema = "", catalog = "mydb")
public class RoomEntity {
private int idRoom;
private String roomType;
private int peopleCapacity;
private Boolean booked;
private Boolean locked;

private HotelsEntity hotel;
private InventoriesEntity inventory;
private RoomPropertyEntity roomProperty;

@OneToOne(mappedBy = "room")
public RoomPropertyEntity getRoom() {
return roomProperty;
}

public void setRoom(RoomPropertyEntity roomProperty) {
this.roomProperty = roomProperty;
}

@OneToOne
@JoinColumn(name = "id_room")
public InventoriesEntity getInventory() {
return inventory;
}

public void setInventory(InventoriesEntity inventory) {
this.inventory = inventory;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_hotel")
public HotelsEntity getHotel() {
return hotel;
}

public void setHotel(HotelsEntity hotel) {
this.hotel = hotel;
}

@Id
@Column(name = "id_room")
public int getIdRoom() {
return idRoom;
}

public void setIdRoom(int idRoom) {
this.idRoom = idRoom;
}

@Basic
@Column(name = "room_type")
public String getRoomType() {
return roomType;
}

public void setRoomType(String roomType) {
this.roomType = roomType;
}

@Basic
@Column(name = "people_capacity")
public int getPeopleCapacity() {
return peopleCapacity;
}

public void setPeopleCapacity(int peopleCapacity) {
this.peopleCapacity = peopleCapacity;
}

@Basic
@Column(name = "booked", columnDefinition = "BIT", length = 1)
public Boolean getBooked() {
return booked;
}

public void setBooked(Boolean booked) {
this.booked = booked;
}

@Basic
@Column(name = "locked", columnDefinition = "BIT", length = 1)
public Boolean getLocked() {
return locked;
}

public void setLocked(Boolean locked) {
this.locked = locked;
}

您能告诉一下有什么方法可以告诉hibernate停止这个循环吗?

附注这段代码包含另一个问题。如果我删除一对一的依赖关系并仅保留一对多的依赖关系,我会收到 failed to lazily Initialize a collection of role: com.example.model.HotelsEntity.rooms, Could notinitialize proxy - no Session (through reference chain: java.util.ArrayList[0]->com.example.model.HotelsEntity["rooms"])

最佳答案

您需要将实体标记为不可序列化 JSON。请在关系的一侧使用 @JsonIgnore 或 @JsonIgnoreProperties("field") (注释是类级别的)。

关于java - 如何防止 hibernate 中的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23475983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com