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

  • 相关阅读:
    智慧养老民政监管平台建设方案
    CF600E Lomsat gelral dsu on tree
    dsu on tree详解
    【Spring 从0开始】Spring5 新功能,整合日志框架 Log4j2
    【Spring 从0开始】JdbcTemplate 数据库事务管理
    【Spring 从0开始】JdbcTemplate 数据库事务参数
    【Spring 从0开始】JdbcTemplate 数据库事务管理
    【Spring 从0开始】JdbcTemplate 操作数据库
    【Spring 从0开始】AOP 操作
    【Spring 从0开始】AOP 操作中的相关术语、环境准备
  • 原文地址:https://www.cnblogs.com/Bkxk/p/9957191.html
Copyright © 2011-2022 走看看