2014-12-03 87 views
0

我有一個表roles,它具有諸如admin,user和其他值。我不想讓它成爲ENUM類型,因爲我認爲這個列表在不久的將來可能會增長,縮小或改變。我找不到讓Hibernate在我的代碼中直接映射到它們各自的枚舉類型的方法,當我得到查詢的對象時。將表格行映射到休眠中的枚舉值4

有沒有一個標準的方法呢?

編輯:所以基本上,而不是存儲在行(這是數據庫上)的字符串,我希望它存儲枚舉,當我查詢數據庫。

public class enum UserType { 
Admin("Admin"), 
User("User"); 

private final String userType; 

UserType(String userType) { 
    this.userType = userType; 
} 

@Override 
public String toString() { 
    return userType; 
} 
} 
@Entity 
@Table(name = "user") 
public class User { 
    private Int id; 
    private UserType userType; 

public Int getId() { 
    return id; 
} 
public void setId(Int id) { 
    this.id = id; 
} 
public UserType getUserType() { 
    return userType; 
} 
public void setUserType(UserType userType) { 
    this.userType = userType; 
} 

}

+0

你可以發佈您的代碼?我無法想象:P – Secondo 2014-12-03 06:06:50

+0

修剪的代碼只是什麼necesarry。一探究竟。 – 2014-12-03 06:19:35

回答

0

,因爲世界上沒有提供這樣的IM要去代碼假設你想通過管理員或用戶查詢的數據?

您可以創建角色的枚舉,然後將其包含到您的實體類中。

例如

枚舉1:

public enum CardSuit implements Serializable{ 

     DIAMOND("Diamond"),HEART("Heart"),SPADE("Spade"),CLUB("Club"); 

     private String cardSuit; 

     private CardSuit(String cardSuit){ 
      this.cardSuit = cardSuit; 
     } 

     public String toString(){ 
      return cardSuit; 
     } 

    } 

枚舉2:

public enum CardValue implements Serializable{ 

    ACE(1),TWO(2),THREE(3),FOUR(4), 
    FIVE(5),SIX(6),SEVEN(7),EIGHT(8), 
    NINE(9),TEN(10),JACK(10),QUEEN(10),KING(10); 

    private int cardValue; 

    private CardValue (int cardValue){ 
     this.cardValue = cardValue; 
    } 

    public int getValue(){ 
     return cardValue; 
    } 

    public String toString(){ 
     return String.valueOf(cardValue); 
    } 

} 

此我如何映射枚舉類型。

@Entity 
@Table(name="CARD") 
public class Card implements Serializable{ 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name="CARD_ID") 
    private int cardId; 

    @Enumerated(EnumType.STRING) 
    @Column(name="CARD_VALUE") 
    private CardValue cardValue; 

    @Enumerated(EnumType.STRING) 
    @Column(name="CARD_SUIT") 
    private CardSuit cardSuit; 

    //Setter & Getter ... 

} 

如果在休眠

這裏有關於標準的知識是通過枚舉查詢卡的例子:

sessionFactory.getCurrentSession() 
      .createCriteria(Card.class) 
      .add(Restrictions.eq("cardValue", CardValue.ACE)) 
      .list();