先创建表结构:
CREATE TABLE `user_detail` ( `id` varchar(32) NOT NULL, `user_type` varchar(255) DEFAULT NULL, `first_name` varchar(10) NOT NULL, `last_name` varchar(20) NOT NULL, `email` varchar(30) NOT NULL, `id_card` varchar(18) NOT NULL, `phone` varchar(13) DEFAULT NULL, `mobile_phone` varchar(11) DEFAULT NULL, `province` varchar(32) DEFAULT NULL, `city` varchar(32) DEFAULT NULL, `zone` varchar(32) DEFAULT NULL, `address` varchar(120) DEFAULT NULL, `user_id` varchar(32) NOT NULL, `create_time` datetime NOT NULL, `last_update` datetime DEFAULT NULL, `deleted` tinyint(4) DEFAULT NULL, PRIMARY KEY (`id`), KEY `user_id` (`user_id`), CONSTRAINT `user_detail_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `users` ( `id` varchar(32) NOT NULL, `login_name` varchar(50) NOT NULL, `password` varchar(128) NOT NULL, `last_login_date` datetime DEFAULT NULL, `last_login_ip` varchar(15) DEFAULT NULL, `locked` tinyint(4) NOT NULL, `create_time` datetime NOT NULL, `last_update` datetime DEFAULT NULL, `deleted` tinyint(4) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `login_name` (`login_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
由于比较简单我就直接贴代码了
BaseEntity.java package com.javaeye.sun2009.job.entity; import java.io.Serializable; import java.util.Date; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.MappedSuperclass; import org.hibernate.annotations.GenericGenerator; /** * 统一定义id的entity基类. * * 基类统一定义id的属性名称、数据类型、列名映射及生成策略. * 子类可重载getId()函数重定义id的列名映射和生成策略. * * @author Administrator */ //JPA Entity基类的标识 @MappedSuperclass public abstract class BaseEntity implements Serializable { @Id @GenericGenerator(name = "hibernate-uuid", strategy = "uuid") @GeneratedValue(generator = "hibernate-uuid") private String id; @Column(updatable = false) private Date createTime = new Date(); @Column(insertable = false) private Date lastUpdate = new Date(); private Boolean deleted = false; public String getId() { return id; } public void setId(String id) { this.id = id; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getLastUpdate() { return lastUpdate; } public void setLastUpdate(Date lastUpdate) { this.lastUpdate = lastUpdate; } public Boolean getDeleted() { return deleted; } public void setDeleted(Boolean deleted) { this.deleted = deleted; } }
User.java package com.javaeye.sun2009.job.entity.user; import java.util.Date; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.OneToOne; import javax.persistence.Table; import com.javaeye.sun2009.job.entity.BaseEntity; /** * 用户登录表 * @author Administrator */ @Entity @Table(name = "users") public class User extends BaseEntity { private static final long serialVersionUID = 2688258413041532400L; /** * 登录用户名 */ @Column(updatable = false) private String loginName; /** * 密码 */ private String password; /** * 最后登录日期 */ @Column(insertable = false) private Date lastLoginDate; /** * 最后登录IP */ @Column(insertable = false) private String lastLoginIp; /** * 账户是否被锁定 */ private Boolean locked; /** * 用户详细信息 */ @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, optional = true) private UserDetail userDetail; public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Boolean getLocked() { return locked; } public void setLocked(Boolean locked) { this.locked = locked; } public UserDetail getUserDetail() { return userDetail; } public void setUserDetail(UserDetail userDetail) { this.userDetail = userDetail; } public Date getLastLoginDate() { return lastLoginDate; } public void setLastLoginDate(Date lastLoginDate) { this.lastLoginDate = lastLoginDate; } public String getLastLoginIp() { return lastLoginIp; } public void setLastLoginIp(String lastLoginIp) { this.lastLoginIp = lastLoginIp; } }
UserDetail.java package com.javaeye.sun2009.job.entity.user; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.JoinColumn; import javax.persistence.OneToOne; import com.javaeye.sun2009.job.entity.BaseEntity; /** * 用户详细信息表 * @author Administrator * */ @Entity public class UserDetail extends BaseEntity { private static final long serialVersionUID = 880651093581151378L; /** * 用户登录信息 */ @OneToOne @JoinColumn(name="user_id") private User user; /** * 用户类型 */ @Enumerated(EnumType.STRING) private UserType userType; /** * 姓 */ private String firstName; /** * 名 */ private String lastName; /** * email地址 */ private String email; /** * 身份证号码 */ private String idCard; /** * 固定电话 */ private String phone; /** * 手机 */ private String mobilePhone; /** * 省 */ private String province; /** * 市 */ private String city; /** * 区 */ private String zone; /** * 详细地址 */ private String address; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getIdCard() { return idCard; } public void setIdCard(String idCard) { this.idCard = idCard; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getMobilePhone() { return mobilePhone; } public void setMobilePhone(String mobilePhone) { this.mobilePhone = mobilePhone; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getZone() { return zone; } public void setZone(String zone) { this.zone = zone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public UserType getUserType() { return userType; } public void setUserType(UserType userType) { this.userType = userType; } }
之后我试了一下一对一的延时加载,在上面的代码处改了一下,如下:
/** * 用户详细信息 */ @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = true) private UserDetail userDetail;
却是不能延时加载,后来有网友说一对一不能延时加载,后来我也就放弃了,有朋友知道的请麻烦告诉我下。
有写错的地方,欢迎指正!