频道栏目
首页 > 资讯 > Oracle > 正文

oracle和hibernate的一对一、一对多代码实例讲解

17-11-27        来源:[db:作者]  
收藏   我要投稿

一、OneToOne(一对一)

1,OneToOne 关联是OneToMany的特列,来看看oracle语句

-- 表myuser
create table myuser(
       userid number(10) primary key,
       username varchar2(20) unique,
       userpass varchar2(20),
       userage number(3)
)
-- 表idcard
create table idcard(
       cardid number(10) primary key,
       cardno varchar2(20) unique not null,
       department varchar2(50),
       userid number(10) not null
)
-- 表myuser的序列
create sequence seq_myuser
minvalue 1 maxvalue 9999999999
start with 3increment by 1
cache 20;
-- 表seq_idcard的序列
create sequence seq_idcard
minvalue 1 maxvalue 9999999999
start with 3 increment by 1
cache 20;
-- 为idcard表添加外键userid
alter table idcard
      add constraint fk_userid foreign key(userid)
      references myuser(userid);
一对一关联的核心,外键唯一,就是要有唯一约束
alter table idcard add constraint uk_userid unique(userid);
2,偷个懒,用反向工程生成实体类和工具类:

不会的可以参考博文:

oracle和hibernate的正向工程和反向工程(详细图解)

3. 修改实体类:

Idcard.java实体类需要修改3个地方:

i.1)用上刚刚生成的序列,使插入的时候id会自动生成

@SequenceGenerator(name = "generator",sequenceName="seq_idcard",allocationSize=1)

i.2)添加toString,方便观察输出

@Override
	public String toString() {
		return "Idcard [cardid=" + cardid + ", myuser=" + myuser + ", cardno="
				+ cardno + ", department=" + department + "]";
	}

i.3)修改OneToOne的注解,添加级联,并指定外键

@OneToOne(fetch = FetchType.LAZY,cascade=CascadeType.ALL)
@JoinColumn(name="userid")
Myuser.java实体类需要修改4个地方:

u.1)添加一个构造函数,测试的时候会用到

public Myuser(String username, String userpass, Short userage) {
		super();
		this.username = username;
		this.userpass = userpass;
		this.userage = userage;
	}

u.2)用上刚刚生成的序列,使插入的时候id会自动生成

@SequenceGenerator(name = "generator",sequenceName="seq_myuser",allocationSize=1)
u.3)添加toString,方便观察输出
@Override
	public String toString() {
		return "Myuser [userid=" + userid + ", username=" + username
				+ ", userpass=" + userpass + ", userage=" + userage + "]";
	}
u.4)修改OneToOne的注解,添加级联,指定映射表
@OneToOne(fetch = FetchType.LAZY,cascade=CascadeType.ALL, mappedBy = "myuser")

4. 使用级联添加,写一个测试类Test.java:

package test;

import org.hibernate.Session;

import utils.HibernateSessionFactory;
import entity.Idcard;
import entity.Myuser;

public class Test {
	private static Session session = (Session) HibernateSessionFactory.getSession();
	
	
	public static Idcard findIdcard(Long id){
		return (Idcard)session.get(Idcard.class, id);
	}
	public static long addIdcard(Idcard card){
		session.beginTransaction();
		long id =  (Long) session.save(card);
		session.getTransaction().commit();
		System.out.println(id);
//		HibernateSessionFactory.closeSession();
		return id;
	}
	public static void main(String[] args) {
		Myuser user = new Myuser("lwy","123456",(short)22);
		Idcard id = new Idcard(user,"350586433121218331","Minnan_Normal_University");
		long cardid = addIdcard(id);
		System.out.println(findIdcard(cardid));
	}
}

跑完程序之后,控制台输出如下:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
32
Idcard [cardid=32, myuser=Myuser [userid=30, username=lwy, userpass=123456, userage=22], cardno=350586433121218331, department=Minnan_Normal_University]

二、OneToMany(一对多)

oracle和hibernate的正向工程和反向工程(详细图解)

里面用的代码就是一对多的。

Idcard.java完整代码:

package entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.SEQUENCE;

import javax.persistence.CascadeType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

/**
 * Idcard entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "IDCARD", schema = "LWY", uniqueConstraints = {
		@UniqueConstraint(columnNames = "USERID"),
		@UniqueConstraint(columnNames = "CARDNO") })
public class Idcard implements java.io.Serializable {

	// Fields

	private Long cardid;
	private Myuser myuser;
	private String cardno;
	private String department;

	// Constructors

	/** default constructor */
	public Idcard() {
	}

	/** minimal constructor */
	public Idcard(String cardno) {
		this.cardno = cardno;
	}

	/** full constructor */
	public Idcard(Myuser myuser, String cardno, String department) {
		this.myuser = myuser;
		this.cardno = cardno;
		this.department = department;
	}

	// Property accessors
	@SequenceGenerator(name = "generator",sequenceName="seq_idcard",allocationSize=1)
	@Id
	@GeneratedValue(strategy = SEQUENCE, generator = "generator")
	@Column(name = "CARDID", unique = true, nullable = false, precision = 10, scale = 0)
	public Long getCardid() {
		return this.cardid;
	}

	public void setCardid(Long cardid) {
		this.cardid = cardid;
	}

	@Override
	public String toString() {
		return "Idcard [cardid=" + cardid + ", myuser=" + myuser + ", cardno="
				+ cardno + ", department=" + department + "]";
	}

	@OneToOne(fetch = FetchType.LAZY,cascade=CascadeType.ALL)
	@JoinColumn(name="userid")
	public Myuser getMyuser() {
		return this.myuser;
	}

	public void setMyuser(Myuser myuser) {
		this.myuser = myuser;
	}

	@Column(name = "CARDNO", unique = true, nullable = false, length = 20)
	public String getCardno() {
		return this.cardno;
	}

	public void setCardno(String cardno) {
		this.cardno = cardno;
	}

	@Column(name = "DEPARTMENT", length = 50)
	public String getDepartment() {
		return this.department;
	}

	public void setDepartment(String department) {
		this.department = department;
	}

}

Myuser.java完整代码

package entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.SEQUENCE;

import javax.persistence.CascadeType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

/**
 * Myuser entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "MYUSER", schema = "LWY", uniqueConstraints = @UniqueConstraint(columnNames = "USERNAME"))
public class Myuser implements java.io.Serializable {

	public Myuser(String username, String userpass, Short userage) {
		super();
		this.username = username;
		this.userpass = userpass;
		this.userage = userage;
	}

	// Fields

	private Long userid;
	private String username;
	private String userpass;
	private Short userage;
	private Idcard idcard;

	// Constructors

	/** default constructor */
	public Myuser() {
	}

	/** full constructor */
	public Myuser(String username, String userpass, Short userage, Idcard idcard) {
		this.username = username;
		this.userpass = userpass;
		this.userage = userage;
		this.idcard = idcard;
	}

	// Property accessors
	@SequenceGenerator(name = "generator",sequenceName="seq_myuser",allocationSize=1)
	@Id
	@GeneratedValue(strategy = SEQUENCE, generator = "generator")
	@Column(name = "USERID", unique = true, nullable = false, precision = 10, scale = 0)
	public Long getUserid() {
		return this.userid;
	}

	public void setUserid(Long userid) {
		this.userid = userid;
	}

	@Column(name = "USERNAME", unique = true, length = 20)
	public String getUsername() {
		return this.username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	@Column(name = "USERPASS", length = 20)
	public String getUserpass() {
		return this.userpass;
	}

	public void setUserpass(String userpass) {
		this.userpass = userpass;
	}

	@Column(name = "USERAGE", precision = 3, scale = 0)
	public Short getUserage() {
		return this.userage;
	}

	public void setUserage(Short userage) {
		this.userage = userage;
	}

	@Override
	public String toString() {
		return "Myuser [userid=" + userid + ", username=" + username
				+ ", userpass=" + userpass + ", userage=" + userage + "]";
	}

	@OneToOne(fetch = FetchType.LAZY,cascade=CascadeType.ALL, mappedBy = "myuser")
	public Idcard getIdcard() {
		return this.idcard;
	}

	public void setIdcard(Idcard idcard) {
		this.idcard = idcard;
	}

}

相关TAG标签
上一篇:k-means聚类实现并绘图的教程
下一篇:UNDO TABLESPACE基本语法及常用语句
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站