hibernatenbsp;注解配置一对多关系

news/2024/7/5 5:58:34
从Hibernate 2.5开始就可以使用annotation实现实体关系的映射了,减少了配置hbm文件的繁琐,而且annotation也是一种趋势,现在的SSH2的整合都是完全可以用annotation来实现。在以前实现一对多关联的关联式都是使用hbm文件,今天我们来使用annotation试试,同样也能实现其功能。

1.数据库:oracle数据库,有person和address二张表,一对多的关系。

create table person
(
id number(4) not null,
uname varchar (20)
);
create table address
(
id number(4) not null,
address varchar(20) not null,
personId number(4) not null
)
alter table person
add constraint primary_id parmary key(id)
deferrable initially deferred;

 

数据库 2.Person实体类:

package com.zengguo.po;

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.Id;

import javax.persistence.JoinColumn;

import javax.persistence.OneToMany;

import javax.persistence.Table;

import org.hibernate.annotations.Fetch;

import org.hibernate.annotations.FetchMode;

import org.hibernate.annotations.GenericGenerator;

import org.hibernate.annotations.Parameter;

@SuppressWarnings(“serial”)

@Entity

@Table(name = “person”)

public class Person implements Serializable {

//oracle 序列

@Id

@GenericGenerator(name = “personGenericGenerator”, strategy = “sequence”,

parameters = { @Parameter(value = “hibernate_seq”, name = “sequence”) })

@GeneratedValue(generator=”personGenericGenerator”)

private long id;

@Column(name=”uname”)

private String uname;

@OneToMany(targetEntity=Address.class,cascade=CascadeType.ALL)

@Fetch(FetchMode.JOIN)

//updatable=false很关键,如果没有它,在级联删除的时候就会报错(反转的问题)

@JoinColumn(name=”personId”,updatable=false)

private Set

sets = new HashSet
();

public Set

getSets() {

return sets;

}

public void setSets(Set

sets) {

this.sets = sets;

}

public Person() {

super();

}

public long getId() {

return id;

}

public void setId(long id) {

this.id = id;

}

public String getUname() {

return uname;

}

public void setUname(String uname) {

this.uname = uname;

}

}

3.Address实体类

package com.zengguo.po;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.ManyToOne;

import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

import org.hibernate.annotations.Parameter;

@SuppressWarnings(“serial”)

@Entity

@Table(name = “address”)

public class Address implements java.io.Serializable {

//使用序列生成主键

@Id

@GenericGenerator(name = “addressGenericGenerator”, strategy = “sequence”,

parameters = { @Parameter(value = “hibernate_seq”, name = “sequence”) })

@GeneratedValue(generator = “addressGenericGenerator”)

private long id;

@Column(name = “address”)

private String address;

//多对一,@JoinColumn与@column类似,指定映射的数据库字段

@ManyToOne(targetEntity = Person.class)

@JoinColumn(name=”personId”,updatable=false)

private Person person;

public Address() {

super();

}

public long getId() {

return id;

}

public void setId(long id) {

this.id = id;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public Person getPerson() {

return person;

}

public void setPerson(Person person) {

this.person = person;

}

}

                                                                                           Email:lsfhack@163.com


http://www.niftyadmin.cn/n/2815553.html

相关文章

React 作为一个 UI 运行时(一、宿主环境和渲染器)

很多教程把React介绍为一个UI框架。这很合理因为它就是一个UI库,这就是react标语的意思。这篇文章不会叫你任何关于建立用户界面的知识,但是会帮助你更生层次的理解React编程模型。这是一篇深入解析的文章,对初学者不太适合。在这篇文章我将通…

Java并发51:并发集合系列-基于独占锁+数组实现的单向阻塞有界队列ArrayBlockingQueue

[超级链接:Java并发学习系列-绪论] [系列序章:Java并发43:并发集合系列-序章] 原文地址:http://www.importnew.com/25566.html 一、 前言 上节介绍了无界链表方式的阻塞队列LinkedBlockingQueue,本节来研究下有界使用数组方式实…

lingo错误代码对照大全

需要lingo11破解版,请留下邮箱。 0 LINGO模型生成器的内存已经用尽(可用“LINGO|Options"命令对General Solver 选项卡中的“Generator Memory Limit"选项进行内存大小的修改) 1 模型中的行数太多(对于有实际意义的模型,这个错…

Java并发52:并发集合系列-基于独占锁+二叉树最小堆实现的单向阻塞无界优先级队列PriorityBlockingQueue

[超级链接:Java并发学习系列-绪论] [系列序章:Java并发43:并发集合系列-序章] 原文地址:http://www.importnew.com/25541.html 一、 前言 PriorityBlockingQueue是带优先级的无界阻塞队列,每次出队都返回优先级最高的元素&…

Mysql之Centos6.5+Mysql5.6搭建配置

下载mysql-xxx.tar.gz文件 将下载的文件通过ftp软件传到linux下/usr/local 解压并重命名 cd /usr/local tar -zxvf mysql-xxx.tar.gz mv mysql-xxx mysql 检测是否安装过mysql rpm -qa |grep mysql 删除旧版本mysql rpm -e mysql-server rpm -e mysql -nodeps 强制性 添加组和用…

oraclenbsp;表复制

1. 复制表结构及其数据:create table table_name_new as select * from table_name_old ;2. 只复制表结构:create table table_name_new as select * from table_name_old where 12;ORcreate table table_name_new like table_name_old ;3. 只复制表数据…

SparkSQL:使用反射、编程方式将RDD转换为DataFrame

为什么要将RDD转换为DataFrame?因为这样的话,我们就可以直接针对HDFS等任何可以构建为RDD的数据,使用Spark SQL进行SQL查询了。这个功能是无比强大的。想象一下,针对HDFS中的数据,直接就可以使用SQL进行查询。 一、Spa…

Java并发53:并发集合系列-基于独占锁+PriorityBlockingQueue实现的单向阻塞无界延时队列DelayQueue

[超级链接:Java并发学习系列-绪论] [系列序章:Java并发43:并发集合系列-序章] 原文地址:http://cmsblogs.com/?p2413 DelayQueue是一个支持延时获取元素的无界阻塞队列。 里面的元素全部都是“可延期”的元素,列头的元素是最先…