zoukankan      html  css  js  c++  java
  • hibernate注解之@Onetomany、@Manytoone、@JoinColumn

     

    @Onetomany用于实体类与数据库表映射中少的一方,请看下面的例子。

    假设一个用户只有一种角色,用户和角色是onetomany的关系

    用户实体

    复制代码
    @Entity
    @Table(name="user")
    public class UserEntity implements Serializable{
        
        @Id
        @GenericGenerator(name="generator",strategy="uuid")
        @GeneratedValue(generator="generator")
        @Column(name="id")
        private String id;
        @Column(name="userName")
        private String userName;
        @Column(name="password")
        private String password;
        @Temporal(value=TemporalType.TIMESTAMP)
        private Date createDate;
      ......
    复制代码

    角色实体

    复制代码
    @Entity
    @Table(name="role")
    public class RoleEntity implements Serializable{
    
        @Id
        @GenericGenerator(name="generator",strategy="uuid")
        @GeneratedValue(generator="generator")
        @Column(name="id")
        private String id;
        @Column(name="name")
        private String name;
        @OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.PERSIST)
        private Set<UserEntity> user;
    复制代码

    同时设置配置文件为<prop key="hibernate.hbm2ddl.auto">update</prop>

    那么在项目启动后会自动生成三张表,分别是

    角色表

    用户表

    角色用户表

    @Onetomany 的参数:

    mappedBy:用于双向关联时使用,否则会引起数据不一致的问题。

    fetch:可取的值有FetchType.EAGER和FetchType.LAZY,前者表示主类被加载时加载,后者表示被访问时才会加载

    cascade:CascadeType.PERSIST(级联新建)、CascadeType.REMOVE(级联删除)、CascadeType.REFRESH(级联刷新)、CascadeType.MERGE(级联更新)、CascadeType.ALL(选择全部)

    @Manytoone

    用于多对一,请看下例,

    用户实体类

    复制代码
    @Entity
    @Table(name="user")
    public class UserEntity implements Serializable{
        @Id
        @GenericGenerator(name="generator",strategy="uuid")
        @GeneratedValue(generator="generator")
        @Column(name="id")
        private String id;
        @Column(name="userName")
        private String userName;
        @Column(name="password")
        private String password;
        @Temporal(value=TemporalType.TIMESTAMP)
        private Date createDate;
        @ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY,optional=true)
        @JoinColumn(name="roleid",nullable=true)
        private RoleEntity role;
    复制代码

    这样在项目启动后只有两种表

    role表

     user表

    @Manytoone的参数:optional 属性是定义该关联类对是否必须存在,值为false时,关联类双方都必须存在,如果关系被维护端不存在,查询的结果为null。 值为true 时, 关系被维护端可以不存在,查询的结果仍然会返回关系维护端,在关系维护端中指向关系被维护端的属性为null。 optional 属性的默认值是true。

    其它属性与onetomany相同。

    @JoinColumn

    与@Column用法相同,区别是@JoinColumn作用的属性必须是实体类

  • 相关阅读:
    Windows下Goland的Terminal设置为Git Bash
    BoltDB简单使用教程
    Base64编码转换原理
    [区块链|非对称加密] 对数字证书(CA认证)原理的回顾
    [数据库锁机制] 深入理解乐观锁、悲观锁以及CAS乐观锁的实现机制原理分析
    升级mojave后的小问题解决
    ubuntu安装ssh服务记录
    dubbo+maven多模块项目单元测试
    sass与less
    (转)初识 Lucene
  • 原文地址:https://www.cnblogs.com/Bkxk/p/9957191.html
Copyright © 2011-2022 走看看