Hibernate -- 注解(Annotation)关系映射


       Hibernate Annotation关系映射有下面几种类型:

1)一对一外键关联映射(单向)

@OneToOne(cascade=CascadeType.ALL)

@JoinColumn(name="userid",unique=true)

    一对一外键关联,使用@OneToOne,并设置了级联操作。@JoinColum设置了外键的名称为userid(数据库字段名),如果不设置,则默认为另一类的属性名+ _id,外键的值是唯一的(unique)。


2)一对一外键关联映射(双向)

 Class1里与上面一样,  

   Class2:

@OneToOne(mappedBy="class2",cascade=CascadeType.ALL)

一对一双向关联关系,使用@OneToOne

注意:需要加上mappedBy="class2",如果不加上的话,Class2也会生成一个外键(class1_id),mappedby="class2"需要指向与他关联对象的一个属性,说明双向关联关系中,有且仅有一端是作为主体(owner)端存在的,主体端负责维护联接列,对于不需要维护这种关系的从表则通过mappedBy属性进行声明,mappedBy的值指向主体的关联属性

规律:只有是双向关联关系,都加上mappedby

3)一对多关联映射(单向)


@OneToMany

@JoinColumn(name="orgid")

/**

 * 一对多注解@OneToMany(单向)

 * 如果只写@OneToMany的话,hibernate会建一张中间表来

 * 维护他们之间的关系,

 * 加上@JoinColumn(name="orgid"),则不会建中间表,他会在

 * 多的一端加上外键orgid,来维护他们之间的关系

 */


4)一对多关联映射(双向)

一端:


@OneToMany(mappedBy="org")

@JoinColumn(name="orgid")

/**

 * 一对多双向,在一的一端中设置mappedBy

 * 说明多的一端为主导

 * 如果指定了外键字段名称,则多的一端也需要指定相同的字段名称

 */

 

多端:

@ManyToOne

@JoinColumn(name="orgid")

/**

 * 一对多双向

 * 需要指定外键与一的一端给的外键名称一致,@JoinColumn(name="orgid")

 * 也可以不指定,如果在多的一端不指定,则一的一端也不能指定

 * 否则为生成两个外键

 */

  

5)多对一关联映射

在多的一端配置:

@ManyToOne(targetEntity=Organization.class)

@JoinColumn(name="orgid")

//多对一注解@ManyToOne

//targetEntity指定了关联对象

//@JoinColumn(name="orgid")指定生产的外键的字段名,默认是org_id


6)多对多关联映射(单向)

@ManyToMany

/**

 * 多对多映射:注解@ManyToMany(单向)

 * 默认情况下,hibernate会自动的创建一张中间表,

 * 来维护多对多关系

 * 默认中间表的名称 :user_role中间表,字段的名称user_id role_id

 * 如果想更换表名和字段名称,注解如下:

 */

@JoinTable(name="t_u_r",

joinColumns={@JoinColumn(name="u_id")},

inverseJoinColumns={@JoinColumn(name="r_id")}

)

7)多对多关联映射(双向)  User端


@ManyToMany

/**

 * 多对多映射:注解@ManyToMany(单向)

 * 默认情况下,hibernate会自动的创建一张中间表,

 * 来维护多对多关系

 * 默认中间表的名称 :user_role中间表,字段的名称user_id role_id

 * 如果想更换表名和字段名称,注解如下:

 */

@JoinTable(name="t_u_r",

joinColumns={@JoinColumn(name="u_id")},

inverseJoinColumns={@JoinColumn(name="r_id")}

)

/**

 * @JoinTable(name="t_u_r",

 * 指定中间表的表名

 * joinColumns={@JoinColumn(name="u_id")},

 * 指定当前对象的外键

 * inverseJoinColumns={@JoinColumn(name="r_id")}

 * 指定关联对象的外键

 */

 

Role端

@ManyToMany(mappedBy="role")

/**

 * 多对多,双向关联映射

 */

基于开源大模型的教学实训智能体软件,帮助教师生成课前备课设计、课后检测问答,提升效率与效果,提供学生全时在线练习与指导,实现教学相长。 智能教学辅助系统 这是一个智能教学辅助系统的前端项目,基于 Vue3+TypeScript 开发,使用 Ant Design Vue 作为 UI 组件库。 功能模块 用户模块 登录/注册功能,支持学生和教师角色 毛玻璃效果的登录界面 教师模块 备课与设计:根据课程大纲自动设计教学内容 考核内容生成:自动生成多样化考核题目及参考答案 学情数据分析:自动化检测学生答案,提供数据分析 学生模块 在线学习助手:结合教学内容解答问题 实时练习评测助手:生成随练题目并纠错 管理模块 用户管理:管理员/教师/学生等用户基本管理 课件资源管理:按学科列表管理教师备课资源 大屏概览:使用统计、效率指数、学习效果等 技术栈 Vue3 TypeScript Pinia 状态管理 Ant Design Vue 组件库 Axios 请求库 ByteMD 编辑器 ECharts 图表库 Monaco 编辑器 双主题支持(专业科技风/暗黑风) 开发指南 # 安装依赖 npm install # 启动开发服务器 npm run dev # 构建生产版本 npm run build 简介 本项目旨在开发一个基于开源大模型的教学实训智能体软件,帮助教师生成课前备课设计、课后检测问答,提升效率与效果,提供学生全时在线练习与指导,实现教学相长。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值