关于hibernate表之间的关联关系的注解使用

例:一对多和多对一的双向关系

这里我们只看用户表和申请假期表的关系

一个用户(一方)可以申请多次假期(多方)

1.其中申请假期的表中有申请人和审核人这两个字段,所以作为外键与用户表中的用户Id对应

2.申请人和审核人在申请表对应的实体类Attendance(多方)中是user对象的类型

3.相对应的在users表对应的user实体类应该写集合类型

一方的User

实体类user.java

<span style="font-size:14px;">package com.swe.oa.model;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

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.OneToMany;
import javax.persistence.SequenceGenerator;

@Entity(name = "Users")
@SequenceGenerator(name = "userSEQ", sequenceName = "userSEQ_DB", allocationSize = 1)
public class User implements Serializable {
	private static final long serialVersionUID = -1370604679718984565L;

	/*
	 * user_Id 用户工号(用户名)
	 */
	private int user_Id;
	/*
	 * user_Nickname 用户昵称
	 */
	private String user_Nickname;
	/*
	 * user_RealName 用户真实姓名
	 */
	private String user_RealName;
	/*
	 * user_Pwd 用户密码
	 */
	private String user_Pwd;
	/*
	 * user_Sex 用户性别
	 */
	private String user_Sex;
	/*
	 * user_Age 用户年龄
	 */
	private int user_Age;
	/*
	 * user_Permission 用户权限0:普通员工、1:经理(默认0)
	 */
	private int user_Permission;
	/*
	 * user_Tel 用户手机号
	 */
	private String user_Tel;
	/*
	 * user_Address 用户住址
	 */
	private String user_Address;
	/*
	 * emails_send 发送邮件集合
	 */
	private Set<Email> emails_send = new HashSet<Email>();
	/*
	 * emails_receive 接收邮件集合
	 */
	private Set<Email> emails_receive = new HashSet<Email>();
	<span style="color:#FF0000;">/*
	 * attendances 申请考勤记录集合
	 */
	private Set<Attendance> ad_Applicanters = new HashSet<Attendance>();
	/*
	 * attendances 审批考勤记录集合
	 */
	private Set<Attendance> ad_Approvalers = new HashSet<Attendance>();</span>

	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "userSEQ")
	public int getUser_Id() {
		return user_Id;
	}

	public void setUser_Id(int user_Id) {
		this.user_Id = user_Id;
	}

	@Column(nullable = false, unique = true, length = 50 )
	public String getUser_Nickname() {
		return user_Nickname;
	}

	public void setUser_Nickname(String user_Nickname) {
		this.user_Nickname = user_Nickname;
	}

	@Column(nullable = false, length = 50)
	public String getUser_RealName() {
		return user_RealName;
	}

	public void setUser_RealName(String user_RealName) {
		this.user_RealName = user_RealName;
	}

	@Column(nullable = false, length = 25)
	public String getUser_Pwd() {
		return user_Pwd;
	}

	public void setUser_Pwd(String user_Pwd) {
		this.user_Pwd = user_Pwd;
	}

	@Column(nullable = false, length = 10)
	public String getUser_Sex() {
		return user_Sex;
	}

	public void setUser_Sex(String user_Sex) {
		this.user_Sex = user_Sex;
	}

	@Column(nullable = false)
	public int getUser_Age() {
		return user_Age;
	}

	public void setUser_Age(int user_Age) {
		this.user_Age = user_Age;
	}

	@Column(nullable = false, columnDefinition = "INT default 0")
	public int getUser_Permission() {
		return user_Permission;
	}

	public void setUser_Permission(int user_Permission) {
		this.user_Permission = user_Permission;
	}

	@Column(nullable = false, length = 11)
	public String getUser_Tel() {
		return user_Tel;
	}

	public void setUser_Tel(String user_Tel) {
		this.user_Tel = user_Tel;
	}

	@Column(nullable = false, length = 255)
	public String getUser_Address() {
		return user_Address;
	}

	public void setUser_Address(String user_Address) {
		this.user_Address = user_Address;
	}

	@OneToMany(mappedBy = "email_Sender", cascade = CascadeType.ALL)
	public Set<Email> getEmails_send() {
		return emails_send;
	}

	public void setEmails_send(Set<Email> emails_send) {
		this.emails_send = emails_send;
	}

	@OneToMany(mappedBy = "email_Receiver", cascade = CascadeType.ALL)
	public Set<Email> getEmails_receive() {
		return emails_receive;
	}

	public void setEmails_receive(Set<Email> emails_receive) {
		this.emails_receive = emails_receive;
	}

	<span style="color:#FF0000;">@OneToMany(mappedBy = "ad_Applicanter", cascade = CascadeType.ALL)//对应的是申请人</span></span><span style="font-size:14px;"><span style="color:#FF0000;">ad_Applicanter</span></span><span style="font-size:14px;"><span style="color:#FF0000;">,并设置级联属性
	public Set<Attendance> getAd_Applicanters() {
		return ad_Applicanters;
	}

	public void setAd_Applicanters(Set<Attendance> ad_Applicanters) {
		this.ad_Applicanters = ad_Applicanters;
	}
         
	@OneToMany(mappedBy = "ad_Approvaler", cascade = CascadeType.ALL)</span></span><span style="font-size:14px;"><span style="color:#FF0000;">//对应的是审批人</span></span><span style="font-size:14px;"><span style="color:#FF0000;">ad_Approvaler</span></span><span style="font-size:14px;"><span style="color:#FF0000;">,并设置级联属性</span></span><span style="font-size:14px;"><span style="color:#FF0000;">
	public Set<Attendance> getAd_Approvalers() {
		return ad_Approvalers;
	}

	public void setAd_Approvalers(Set<Attendance> ad_Approvalers) {
		this.ad_Approvalers = ad_Approvalers;
	}</span>
}
多方的Attendance.java ------------->
package com.swe.oa.model;

import java.io.Serializable;
import java.util.Date;

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.ManyToOne;
import javax.persistence.SequenceGenerator;


@Entity(name = "Attendances")
@SequenceGenerator(name = "attendanceSEQ", sequenceName = "attendanceSEQ_DB", allocationSize = 1)
public class Attendance implements Serializable {
    private static final long serialVersionUID = -1370604679718984565L;

    /*
     * ad_Id 考勤记录编号
     */
    private int ad_Id;
    /*
     * ad_StartTime 考勤记录请假开始时间
     */
    private Date ad_StartTime;
    /*
     * ad_Endtime 考勤记录请假结束时间
     */
    private Date ad_Endtime;
    /*
     * ad_Days 考勤记录请假具体天数
     */
    private int ad_Days;
    /*
     * ad_ReviewStatus 考勤记录审批状态0:未审核、1:审核通过、2:审核拒绝(默认0)
     */
    private int ad_ReviewStatus;
    /*
     * ad_Reason 考勤记录请假原因
     */
    private String ad_Reason;
   <span style="color:#FF0000;"> /*
     * ad_Approval 考勤记录审批人
     */
    private User ad_Approvaler;
    /*
     * ad_Approval 考勤记录申请人
     */
    private User ad_Applicanter;</span>

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "attendanceSEQ")
    public int getAd_Id() {
        return ad_Id;
    }

    public void setAd_Id(int ad_Id) {
        this.ad_Id = ad_Id;
    }

    @Column(nullable = false)
    public Date getAd_StartTime() {
        return ad_StartTime;
    }

    public void setAd_StartTime(Date ad_StartTime) {
        this.ad_StartTime = ad_StartTime;
    }

    @Column(nullable = false)
    public Date getAd_Endtime() {
        return ad_Endtime;
    }

    public void setAd_Endtime(Date ad_Endtime) {
        this.ad_Endtime = ad_Endtime;
    }

    @Column(nullable = false)
    public int getAd_Days() {
        return ad_Days;
    }

    public void setAd_Days(int ad_Days) {
        this.ad_Days = ad_Days;
    }

    @Column(nullable = false, columnDefinition = "INT default 0")
    public int getAd_ReviewStatus() {
        return ad_ReviewStatus;
    }

    public void setAd_ReviewStatus(int ad_ReviewStatus) {
        this.ad_ReviewStatus = ad_ReviewStatus;
    }

    @Column(nullable = false, length = 255)
    public String getAd_Reason() {
        return ad_Reason;
    }

    public void setAd_Reason(String ad_Reason) {
        this.ad_Reason = ad_Reason;
    }

   <span style="color:#FF0000;"> @ManyToOne
    @JoinColumn(name = "user_approvaler_id")//外键
    //审批人
    public User getAd_Approvaler() {
        return ad_Approvaler;
    }

    public void setAd_Approvaler(User ad_Approvaler) {
        this.ad_Approvaler = ad_Approvaler;
    }

    @ManyToOne 
    @JoinColumn(name = "user_applicanter_id")
    public User getAd_Applicanter() {
        return ad_Applicanter;
    }

    public void setAd_Applicanter(User ad_Applicanter) {
        this.ad_Applicanter = ad_Applicanter;
    }
</span>
}


</span>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate提供了多种方式来进行关联查询,其中一种常用的方式是使用注解来配置关联关系。下面是一个示例: 假设有两个实体类:`User`和`Order`,它们之间存在一对多的关联关系,即一个用户可以拥有多个订单。 ```java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 其他属性 @OneToMany(mappedBy = "user") private List<Order> orders; // getter和setter方法 } @Entity @Table(name = "orders") public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 其他属性 @ManyToOne @JoinColumn(name = "user_id") private User user; // getter和setter方法 } ``` 在`User`类中,使用`@OneToMany`注解标注了与`Order`类的一对多关系,并通过`mappedBy`属性指定了反向关联的属性名。 在`Order`类中,使用`@ManyToOne`和`@JoinColumn`注解标注了与`User`类的多对一关系,并通过`name`属性指定了外键列名。 这样配置之后,就可以通过Hibernate进行关联查询了。例如,查询某个用户及其所有订单: ```java Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); User user = session.get(User.class, userId); List<Order> orders = user.getOrders(); tx.commit(); session.close(); ``` 上述代码中,通过`session.get(User.class, userId)`获取到一个用户对象,然后通过`user.getOrders()`获取该用户的所有订单。 这只是关联查询的一种示例,实际使用中还可以使用其他注解和配置方式来满足不同的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值