zoukankan      html  css  js  c++  java
  • 如何使用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。

  • 相关阅读:
    mysql字符集编码整理
    mysql 修改字符集
    数据库高并发的设计
    mysql 中 character set 与 collation 的理解
    阿里代码规范检查工具的安装使用
    安卓学习Day05
    安卓学习Day04
    安卓学习Day03
    安卓学习day02
    安卓学习Day1
  • 原文地址:https://www.cnblogs.com/shihao/p/2558332.html
Copyright © 2011-2022 走看看