繁体   English   中英

在Hibernate 4中将表行映射到Enum值

[英]Mapping Table Rows to Enum Values in Hibernate 4

我有一个表roles ,其中包含adminuser和其他值。 我不想将其设为ENUM类型,因为我认为列表可能会在不久的将来增长,缩小或更改。 当我得到查询的对象时,我想不出一种方法来自动将Hibernate直接映射到我的代码中各自的枚举类型。

有标准的方法吗?

编辑:因此,基本上,而不是将字符串存储在行中(这是数据库中的内容),我希望它在查询数据库时存储Enum。

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;
}

}

由于没有提供代码,因此我将假定您要通过管理员或用户查询数据?

您可以创建一个角色枚举,然后将其包含在您的实体类中。

例如

枚举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 ...

}

如果您了解休眠标准

这是通过枚举查询Card的示例:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM