model类中enum类型与数据库字段的映射
这个东西搞了好久,不难,但小细节没注意到一直不对,现在终于做出来了,赶紧记下。
下面是实体类User与对应的表user之间的映射:
1. 准备数据库表user
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`gender` int(3) NOT NULL,
`level` int(1) NOT NULL,
`birth` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`is_locked` bit(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of `user`
-- ----------------------------
BEGIN;
INSERT INTO `user` VALUES ('1', 'c1', '1', '0', '2016-02-28 10:44:34', b'0');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
2. model类User
package pr.cgl.model;
import javax.persistence.*;
/**
* Created by LL on 16/1/25.
*/
@Entity
@Table(name = "user")
public class User {
private Integer id;
private String name;
private Boolean isLocked;
public enum Gender{
MALE,
FEMALE
}
public enum Level{
cardMember, // 0
goldCardMember, // 1
platinumCardMember, // 2
}
private Gender gender;
private Level level;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "is_locked")
public Boolean getIsLocked() {
return isLocked;
}
public void setIsLocked(Boolean isLocked) {
this.isLocked = isLocked;
}
@Column(name = "gender")
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
@Column(name="level")
public Level getLevel() {
return level;
}
public void setLevel(Level level) {
this.level = level;
}
}
3. 测试类
package pr.cgl.test;
import pr.cgl.model.User;
import pr.cgl.util.EntityUtil;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.List;
/**
* Created by LL on 16/1/25.
*/
public class EnumTest {
public static void main(String[] args) {
EntityManager em = EntityUtil.em;
String jql = " FROM User u";
Query query = em.createQuery(jql);
List<User> userList = query.getResultList();
for(User u: userList){
System.out.println("id="+u.getId()+" name="+u.getName()+" is_locked="+u.getIsLocked()+" gender="+u.getGender()+" level="+u.getLevel());
}
}
}
4. 输出结果
Hibernate: select user0_.id as id0_, user0_.gender as gender0_, user0_.is_locked as is3_0_, user0_.level as level0_, user0_.name as name0_ from user user0_
id=1 name=c1 is_locked=false gender=FEMALE level=cardMember