Hibernate 多表关联 @ManyToOne

Hibernate在解决多表关联 针对一对多得情形引入了 @ManyToOne

适用情况比如:user(用户)--role(角色),user(用户)-organ(机构) ……

下面开始表演:

Hibernate5参考文档

数据结构参考@OneToOne

@ManyToOne(fetch=FetchType.LAZY,cascade=CascadeType.ALL,optional=true)//多个用户对应一个角色
@JoinColumn(name="roleId",insertable=false,updatable=false)//关联字段,用户外键User.roleId--角色外键Role.id
private Role roles;

@ManyToOne

属性

必需

说明

cascade

 

 

默认值:CascadeType 的空数组。

默认情况下,JPA 不会将任何持续性操作层叠到关联的目标。

如果希望某些或所有持续性操作层叠到关联的目标,请将 cascade 设置为一个或多个 CascadeType 实例,其中包括:

· ALL — 针对拥有实体执行的任何持续性操作均层叠到关联的目标。

· MERGE — 如果合并了拥有实体,则将 merge 层叠到关联的目标。

· PERSIST — 如果持久保存拥有实体,则将 persist 层叠到关联的目标。

· REFRESH — 如果刷新了拥有实体,则 refresh 为关联的层叠目标。

· REMOVE — 如果删除了拥有实体,则还删除关联的目标。

fetch

 

 

默认值:FetchType.EAGER。

默认情况下,JPA 持续性提供程序使用获取类型 EAGER:这将要求持续性提供程序运行时必须迫切获取数据。

如果这不适合于应用程序或特定的持久字段,请将 fetch 设置为 FetchType.LAZY:这将提示持续性提供程序在首次访问数据(如果可以)时应不急于获取数据。

optional

 

 

默认值:true。

默认情况下,JPA 持续性提供程序假设所有(非基元)字段和属性的值可以为空。

如果这并不适合于您的应用程序,请将 optional 设置为 false。

targetEntity

 

 

默认值:JPA 持续性提供程序从被引用的对象类型推断出关联的目标实体

如果持续性提供程序无法推断出目标实体的类型,则将关联拥有方上的 targetEntity 元素设置为作为关系目标的实体的 Class。

备注:optional=true 相当于 left join 允许返回NULL, optional=false 相当于 inner join

@JoinColumn 不再多说参考结构文档说明

目标:通过用户表查询出角色

 

@SuppressWarnings("unchecked")
    @RequestMapping(value="/sysLogin.do")
    public @ResponseBody String sysLogin(@NotBlank String name,@NotBlank String password) {
    	password=Encrypt.md5(password, String.valueOf(name));
    	List<String> param=new ArrayList();
    	param.add(name);
    	param.add(password);
    	List<User> user=simpleService.findBySqlParam("from User u  where u.userName=? and u.userPassword=?", param);//自己封装查询方法
    	if(user.size()>0 && null!=user.get(0).getRoles()) {
    		return  user.get(0).getRoles().getRoleName();
    	}else {
    		return "未查询到数据";
    	}
    	
    }



备注:关于个个参数的用法和产生的结果可以一一去试,映像深刻。


  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值