如何使用JPA注解标注一对多的关系

发表于: java/j2ee | 作者: darkmi | 日期: 2012/05/10 08:00
标签: 注解, JPA
字号:

假设应用场景如下:Node与Ipqam是一对多的关系,其中,Node类对应node表如下:

CREATE TABLE `node` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

Ipqam类对应ipqam表如下:

CREATE TABLE `t_rm_ipqam` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,  
  `node_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_reference_50` (`node_id`),
  CONSTRAINT `fk_reference_50` FOREIGN KEY (`node_id`) REFERENCES `node` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

两个类分别如下:

public class Node {
	private List<Ipqam> ipqamList = Lists.newArrayList();

	@OneToMany(cascade = CascadeType.REMOVE, fetch = FetchType.LAZY, mappedBy = "node")
	public List<Ipqam> getIpqamList() {
		return ipqamList;
	}

	public void setIpqamList(List<Ipqam> ipqamList) {
		this.ipqamList = ipqamList;
	}

}

说明

1、该类经过简化,没有全部列出代码,在此我们只关注OneToMany注解及其属性设置。

2、@OneToMany

@OneToMany指明 Node 与 Ipqam 之间的关联关系为一对多关系。

3、mappedBy=“node”

mappedBy定义类之间的双向关系。如果类之间是单向关系,不需要提供定义,如果类和类之间形成双向关系,我们就需要使用这个属性进行定义,

其他属性说明参加上篇文章:如何使用JPA注解标注一对一的关系

public class Ipqam {
	private Node node;//所属节点

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "node_id")
	public Node getNode() {
		return this.node;
	}

	public void setNode(Node node) {
		this.node = node;
	}
}

说明

@ManyToOne指明 Ipqam 和 Node 之间为多对一关系,多个 Ipqam 实例关联的都是同一个 Node 对象。

其中的属性和@OneToMany基本一样,但@ManyToOne注释的fetch属性默认值是FetchType.EAGER。

切换主题切换主题
返回顶部