我試圖用隨機數據和Hibernate填充數據庫表。如何使用Hibernate將枚舉值保存到數據庫?
但我的代碼填充不兼容的數據到表中(不完全兼容它在枚舉聲明該元素的索引,爲前:在ApartmentState
- FREE
是將其設置爲相應的列其指數第一要素 - 0。但我想放置或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)和睡眠的地方(1,2 ...)。
但是這將一些錯誤的數據放入表中。
這裏是一個工作臺內容:
爲什麼它把唯一指標,而不是作爲字符串或枚舉。
我如何在未來恢復到期望的價值。
這裏是公寓類片段:
@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;
}
}
對我來說,最好是把枚舉爲ENUM(可能在MySQL工作臺)或字符串(和使用name()
和valueOf()
從Enum類)。
但是如何用hibernate實現它。
如何解決這個問題?
[Hibernate中枚舉(可能重複http://stackoverflow.com/questions/417062/enumerations-in-hibernate) –
https://sysdotoutdotprint.wordpress.com/2017/01/25/enumtype-ordinal-vs-enumtype-string/ – mel3kings