如何使用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 ipqamList = Lists.newArrayList();

@OneToMany(cascade = CascadeType.REMOVE, fetch = FetchType.LAZY, mappedBy = “node”)
public List getIpqamList() {
return ipqamList;
}

public void setIpqamList(List 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。

此条目发表在java/j2ee分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据