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作用的属性必须是实体类

  • 相关阅读:
    docker搭建主从复制mysql
    mysql主从复制(mariadb)
    docker搭建mysql8.0
    docker安装mysql
    终端配置kxsw
    AJAX教程
    移动端常见布局
    css为什么需要精灵图
    元素的显示与隐藏
    css网页布局总结
  • 原文地址:https://www.cnblogs.com/yxjdragon/p/6008603.html
Copyright © 2011-2022 走看看