gpt4 book ai didi

java - 如何使用 Hibernate 将枚举值保存到 DB?

转载 作者:IT王子 更新时间:2023-10-29 00:30:17 28 4
gpt4 key购买 nike

我尝试用随机数据和 Hibernate 填充数据库表。

但是我的代码将不兼容的数据填充到表中(不完全不兼容,它是在枚举中声明的该元素的索引,例如:在 ApartmentState - FREE 是它的第一个元素将其索引设置为适当的列 - 0。但我想将 or FREE 作为枚举或字符串)。

我不明白为什么会这样。

这是代码片段:

private List<Apartment> generateApartments() {
for (int i = 1; i <= 3; i++) {
for (int j = 2; j <= 5; j++) {
Apartment apartment = new Apartment();
// fill apartment
apartment.setRoomName(generateRoomName());
apartment.setPricePerHour(generatePrice());
apartment.setApartmentState(FREE);
apartment.setRating(getDesiredRating(j));
apartment.setSleepPlaces(getDesiredPlaces(i));
apartment.setActive(true);
// save apartment
apartments.add(apartment);
}
}
return apartments;
}

private Apartment.SleepPlaces getDesiredPlaces(int i) {
switch (i) {
case 1:
return ONE_PLACE;
case 2:
return TWO_PLACES;
case 3:
return THREE_PLACES;
}
return ONE_PLACE;
}

private Apartment.StarRating getDesiredRating(int j) {
switch (j) {
case 2:
return TWO_STARS;
case 3:
return THREE_STARS;
case 4:
return FOUR_STARS;
case 5:
return FIVE_STARS;
}
return TWO_STARS;
}

我需要在表中填写一些枚举值,如评级 (2, 3, 4) 和 sleep 地点 (1, 2..)。

但这会将一些错误的数据放入表中。

这是工作台上的内容:

apartment

为什么它只放索引,而不是字符串或枚举。
我怎样才能在未来以期望的值(value)恢复它。

这是公寓类的片段:

@Entity
@Table(name = "Apartments")
public class Apartment extends AbstractEntity implements Comparable<Apartment> {
private Integer id;
private String roomName;
private Double pricePerHour;
private ApartmentState apartmentState;
private StarRating rating;
private SleepPlaces sleepPlaces;
private Boolean active;

public enum ApartmentState {
FREE, REQUESTED, BOOKED, LIVED, CLEANING, PROCESSING
}

public enum StarRating {
TWO_STARS("2 stars"), THREE_STARS("3 stars"), FOUR_STARS("4 stars"), FIVE_STARS("5 stars");

private String description;

private StarRating(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}

public enum SleepPlaces {
ONE_PLACE("1 person"), TWO_PLACES("2 persons"), THREE_PLACES("3 persons"), FOUR_PLACES("4 persons");

private String count;

private SleepPlaces(String count) {
this.count = count;
}
public String getCount() {
return count;
}
}

对我来说,最好的方法是将枚举作为枚举(可能在 MySql 工作台上)或作为字符串(并使用 Enum 类中的 name()valueOf() ).

但是如何用hibernate来实现呢。

如何解决这个问题?

最佳答案

您可以添加以下枚举,以表明您希望字符串表示被持久化:

@Enumerated(EnumType.STRING)
private ApartmentState apartmentState;

关于java - 如何使用 Hibernate 将枚举值保存到 DB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21971272/

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