Spring Data JPA 定义实体类关系:一对一

JPA使用@OneToOne来标注一对一的关系。 实体 Dept:部门。 实体 User:用户。 Dept和 User 是一对一的关系。 这里使用关联字段描述JPA的一对一关系。 通过关联字段的方式(一个实体通过关联字段关联到另一个实体的主键);   通过关联字段的方式 Dept表(dept_id,dept_name,dept_tel,dept_fax,email,dept_addr,deptmanager) User表(user_id,phone,zipcode,address,***)

建库脚本:

-- 导出  表 oasys.aoa_dept 结构
CREATE TABLE IF NOT EXISTS `aoa_dept` (
  `dept_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '部门ID',
  `dept_addr` varchar(255) DEFAULT NULL COMMENT '部门地址',
  `dept_fax` varchar(255) DEFAULT NULL COMMENT '部门传真',
  `dept_name` varchar(255) DEFAULT NULL COMMENT '部门名称',
  `dept_tel` varchar(255) DEFAULT NULL COMMENT '部门电话',
  `email` varchar(255) DEFAULT NULL COMMENT '部门邮箱',
  `deptmanager` bigint(20) DEFAULT NULL COMMENT '部门管理员',
  `end_time` datetime DEFAULT NULL,
  `start_time` datetime DEFAULT NULL,
  PRIMARY KEY (`dept_id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;



-- 导出  表 oasys.aoa_user 结构
CREATE TABLE IF NOT EXISTS `aoa_user` (
  `user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `address` varchar(255) DEFAULT NULL COMMENT '地址',
  `bank` varchar(255) DEFAULT NULL COMMENT '银行账号',
  `birth` datetime DEFAULT NULL COMMENT '生日',
  `eamil` varchar(255) DEFAULT NULL COMMENT '邮箱',
  `father_id` bigint(20) DEFAULT NULL COMMENT '上级id',
  `hire_time` datetime DEFAULT NULL COMMENT '入职时间',
  `user_idcard` varchar(255) DEFAULT NULL COMMENT '身份证',
  `img_path` varchar(255) DEFAULT NULL COMMENT '用户头像路径',
  `is_lock` int(11) DEFAULT NULL COMMENT '该用户是否被禁用',
  `last_login_ip` varchar(255) DEFAULT NULL COMMENT '用户最后登录ip',
  `last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
  `modify_time` datetime DEFAULT NULL COMMENT '最后修改时间',
  `modify_user_id` bigint(20) DEFAULT NULL COMMENT '最后修改此用户的用户id',
  `password` varchar(255) DEFAULT NULL COMMENT '密码',
  `real_name` varchar(255) DEFAULT NULL COMMENT '真实姓名',
  `salary` float DEFAULT NULL COMMENT '工资',
  `user_school` varchar(255) DEFAULT NULL COMMENT '毕业院校',
  `sex` varchar(255) DEFAULT NULL COMMENT '性别',
  `theme_skin` varchar(255) DEFAULT NULL COMMENT '主题皮肤',
  `user_edu` varchar(255) DEFAULT NULL COMMENT '学历',
  `user_name` varchar(255) DEFAULT NULL COMMENT '用户名',
  `user_sign` varchar(255) DEFAULT NULL COMMENT '用户签名',
  `user_tel` varchar(255) DEFAULT NULL COMMENT '电话',
  `superman` int(11) DEFAULT NULL,
  `holiday` int(11) DEFAULT NULL COMMENT '请假天数',
  `pinyin` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`user_id`),
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

功能代码:

实体类文件:

package com.zzg.entity;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.validator.constraints.NotEmpty;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;


@SuppressWarnings("serial")
@Entity
@Table(name = "aoa_dept")
@Data // 自动生成get、set、toString、equals方法
@AllArgsConstructor // 全参构造方法
@NoArgsConstructor // 无参构造方法
@Accessors(chain = true) // 链式编程
public class Dept implements java.io.Serializable  {
	@Id
	@Column(name = "dept_id")
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Long deptId;	//部门id
	
	@Column(name = "dept_name")
	@NotEmpty(message="部门名称不为空")
	private String deptName;	//部门名字  非空 唯一
	
	@Column(name = "dept_tel")
	private String deptTel;		//部门电话  
	
	@Column(name = "dept_fax")
	private String deptFax;		//部门传真
	
	@Column(name = "email")
	private String email;		//部门email
	
	@Column(name = "dept_addr")
	private String deptAddr;	//部门地址


	 @OneToOne(cascade=CascadeType.ALL) //JPA注释: 一对一 关系
     @JoinColumn(name ="deptmanager",referencedColumnName = "user_id")
	 // @JoinColumn注解中的name元素为被关联对象的id,即Dept类与User中关联字段,而referencedColumnName则为关联对象的id,即User类的user_id即@JoinColumn所在实体类的id。
	private User user;

}
package com.zzg.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;



/**
 * 备注:position_id	职位
		role_id		角色
		dept_id		部门
	以上三个外键没有完成
 * @author luoxiang
 *
 */
@Entity
@Table(name="aoa_user")
@Data // 自动生成get、set、toString、equals方法
@AllArgsConstructor // 全参构造方法
@NoArgsConstructor // 无参构造方法
@Accessors(chain = true) // 链式编程
public class User {
	
	@Id
	@Column(name="user_id")
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Long userId;		//用户id
	
	@Column(name="user_name")
	private String userName;	//登录用户名
	
	@Column(name="user_tel")
	private String userTel;		//用户电话
	
	@Column(name="real_name")
	private String realName;    //真实姓名
	
	private String pinyin;
	
	private String eamil;		//邮件
	
	private String address;		//地址
	
	@Column(name="user_edu")
	private String userEdu;		//用户学历
	
	
	private Boolean superman=false;
	
	@Column(name="user_school")
	private String school;		//学校
	
	@Column(name="user_idcard")
	private String idCard;		//用户身份证
	
	private String bank;		//银行
	
	private String sex;			//性别
	
	@Column(name="theme_skin")
	private String themeSkin;	//主题皮肤
	
	private Date birth;			//生日
	
	@Column(name="user_sign")
	private String userSign;	//用户签名
	
	private String password;	//用户密码
	
	private String salary;		//用户薪水
	
	@Column(name="img_path")
	private String imgPath;		//用户头像路径
	
	@Column(name="hire_time")
	private Date hireTime;		//入职时间
	
	@Column(name="is_lock")
	private Integer isLock=0;		//该用户是否被禁用
	
	@Column(name="last_login_ip")
	private String lastLoginIp;	//用户最后登录ip;
	
	@Column(name="last_login_time")
	private Date lastLoginTime;	//最后登录时间
	
	@Column(name="modify_time")
	private Date modifyTime;		//最后修改时间
	
	@Column(name="modify_user_id")
	private Long modifyUserId;	//最后修改此用户的用户id
	
	@Column(name="father_id")
	private Long fatherId;		//上司id
	
	private Integer holiday;   //请假天数
	
}

实体类Repository 接口定义:

package com.zzg.entity.dao;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import com.zzg.entity.Dept;

public interface  DeptRepository extends JpaRepository<Dept, Integer>  {
	List<Dept> findByDeptId(Long id);
	
	
	@Query("select de.deptName from Dept de where de.deptId=:id")
	String findname(@Param("id")Long id);
}
package com.zzg.entity.dao;

import org.springframework.data.jpa.repository.JpaRepository;

import com.zzg.entity.User;

public interface UserRepository extends JpaRepository<User, Integer> {

}

功能模块测试:

// 简单查询
@Test
	public void selectOneToOne() {
		List<Dept> dept=repository.findByDeptId(1L);
		dept.stream().forEach(item ->{
			Dept objet = item;
			System.out.println(objet.getDeptId());
			System.out.println(objet.getUser().toString());
		});
		
	}

效果展示:

	// 简单修改
    @Test
	public void selectOneToOne() {
		List<Dept> dept=repository.findByDeptId(1L);
		dept.stream().forEach(item ->{
			Dept objet = item;
			System.out.println(objet.getDeptId());
			if(ObjectUtils.isNotEmpty(objet.getUser())) {
				System.out.println(objet.getUser().toString());
			} else {
				System.out.println("部门管理者为null");
			}
			
		});
		
	}

 效果展示:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值