先创建表结构:
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;
却是不能延时加载,后来有网友说一对一不能延时加载,后来我也就放弃了,有朋友知道的请麻烦告诉我下。
有写错的地方,欢迎指正!
分享到:
相关推荐
本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的注解配置。 首先,一对一关联可以分为两种类型:单向和双向。在单向一对一关联中,只有一个实体知道另一个实体的存在,而另一...
在Java的持久化框架Hibernate中,`@OneToOne`注解用于表示一对一的关联关系,而唯一外键一对一双向关联则是这种关系的一种具体实现方式。这篇文章将深入探讨这一概念,帮助你理解如何在实际开发中应用。 首先,我们...
本文将深入探讨如何使用Hibernate注解实现基于外键的一对多双向关联。我们将通过具体实例来解析这个主题,并结合源码分析其工作原理。 首先,我们要明白一对多关联意味着一个实体可以拥有多个关联的实体。在数据库...
本篇将深入探讨Hibernate中的一对一单向外键关联,通过注解和XML配置两种方式进行实现。这种关联允许一个实体类与另一个实体类之间存在一对一的关系,并且只在其中一个实体类中维护这种关系。 首先,我们来理解一对...
本篇文章将深入探讨如何使用Hibernate Annotation来实现基于外键的单向多对一关联。 在关系型数据库中,多对一关联是一种常见的关系类型,意味着一个实体(如表)可以与另一个实体有多条记录关联,而另一个实体只能...
在Java的持久化框架Hibernate中,一对一双向外键关联是一种常见的关系映射方式,用于表示两个实体类之间一对一的关联关系。在这个场景下,每个实体都有一个引用指向另一个实体,形成双向关联。本篇文章将深入探讨...
本文将详细讲解“Hibernate Annotation 中的共享主键一对一双向关联”。 首先,我们需要理解什么是共享主键(Shared Primary Key)。在一对一的关联关系中,如果两个实体共享同一个主键,那么这种关联被称为共享...
在这个例子中,`User`类代表了`users`表,`id`是主键,`username`是表的一个列,`role`是与`Role`类的一对多关联。 **4. 注解的优势** - **简洁性**:注解使得ORM配置与实体类代码紧密集成,减少了XML配置文件的...
- `@OneToMany`, `@ManyToOne`, `@OneToOne`, `@ManyToMany`: 定义不同类型的关联关系,如一对一、一对多、多对一和多对多。 3. **实体类的注解示例** 一个简单的User实体类可能如下所示: ```java @Entity @...
在Java持久化框架Hibernate中,一对一(One-to-One)映射是对象关系映射的一种常见方式,用于表示两个实体之间一对一的关系。这种关系通常出现在一个实体的实例只能与另一个实体的单个实例相关联的情况。下面我们将...
其中一个实体通过外键关联到另一个实体的主键(注意要模拟一对一关联必须在外键列上添加唯一约束),(3).通过关联表来保存两个实体之间的连接关系(要模拟一对一关联必须在每一个外键上添加唯一约束)。 1.共享主键的...
- **2.2.5.1 一对一(One-to-one)**:使用 `@OneToOne` 注解来定义两个实体Bean之间的一对一关联关系。 - **2.2.5.2 多对一(Many-to-one)**:使用 `@ManyToOne` 注解来定义多对一的关联关系。 - **2.2.5.3 ...
- **`@OneToOne`** 和 **`@JoinColumn`**:用于表示一对一关联关系,并指定外键的名称。 ```java @Entity class MedicalHistory implements Serializable { @Id @OneToOne @JoinColumn(name = "person_id") ...
- **一对一关联 (@OneToOne)**: 使用`@OneToOne`注解建立两个实体之间一对一的关系。`mappedBy`属性用于指定被引用方的属性名。 - **一对多关联 (@OneToMany)**: 表示一个实体可以关联多个其他实体。`@JoinColumn`...
一对一双向外键关联与单向外键关联类似,不同之处在于两个实体之间存在双向的导航属性。 **Annotation方式:** ```java @Entity public class Husband { // ... // 一对一,双向外键关联 @OneToOne(mappedBy =...
本篇文章将详细讲解如何利用Hibernate的注解实现基于连接表的单向一对多关联。 首先,理解一对多关联:在数据库设计中,一对多关联意味着一个实体(表)可以与多个其他实体(表)相对应。例如,一个学生可以有多个...
6. @ManyToOne、@OneToOne、@OneToMany、@ManyToMany:表示不同类型的关联关系,如一对一、一对多、多对一和多对多。 7. @JoinColumn:在关联关系中,指定外键所在的列名。 8. @AssociationOverride和@...
6. `@OneToMany`、`@ManyToOne`、`@OneToOne`、`@ManyToMany`:这些注解用于描述实体类之间的关联关系,如一对一、一对多、多对一和多对多。 7. `@JoinColumn`、`@JoinTable`:在处理关联关系时,用来指定外键字段...
- **一对一(One-to-one)**:使用 `@OneToOne` 注解来映射一对一的关系。 - **多对一(Many-to-one)**:使用 `@ManyToOne` 注解来映射多对一的关系。 - **集合类型**:使用 `@OneToMany`, `@ManyToMany` 或 `@...