首页新闻找找看学习计划

Hibernate的bean配置上多对多,如何级联查询?

0
[待解决问题]
public class User extends Page{
    /**
     * 
     */
    private static final long serialVersionUID = -437313584668818505L;
    @Id
    @Column
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
    @Column
    private String name;
    @Column
    private String sex;
    @Column
    private Timestamp birthday;
    @Column
    private String location;
    @Column
    private Integer phone;
    @Column
    private String note;
    @Column
    private Timestamp createtime;
    @Column
    private String delflg;
    @Column
    private String acount;
    @Column
    private String password;
    @ManyToMany
    @JoinTable(
            name="user_role",
            joinColumns=@JoinColumn(name="user_id"),
            inverseJoinColumns=@JoinColumn(name="role_id"))    
    private List<Role> roles;
public class Role extends Page{
    /**
     * 
     */
    private static final long serialVersionUID = -7093371292207481848L;
    @Id
    @Column
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
    @Column
    private String name;
    @Column
    private Timestamp createtime;
    @Column
    private String delflg;
    @ManyToMany(mappedBy="roles",fetch=FetchType.EAGER)
    private List<User> users;
    
    @ManyToMany
    @JoinTable(
            name="role_perm",
            joinColumns=@JoinColumn(name="role_id"),
            inverseJoinColumns=@JoinColumn(name="perm_id"))
    private List<Perm> perms;
@Transactional
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;
    
    @Override
    public Serializable add(User user) {
        
        return userDao.save(user);
    }

    @Override
    public List<User> findByPage(User user) {
        return userDao.findByPage("from User", user.getPage(),user.getRows());
    }
    

}

 

return userDao.findByPage("from User", user.getPage(),user.getRows());

 这里可以写hql,但是我想在service层,把全部的数据查出来,如何让hibernate把user的roles加载出来?

弗朗西斯的主页 弗朗西斯 | 菜鸟二级 | 园豆:495
提问于:2017-11-18 01:15
< >
分享
所有回答(4)
0

怎么你的类注解的写法和我学的写法格式不一样呢。 这样写也能建立类与数据库的映射关系吗

至尊宝" | 园豆:208 (菜鸟二级) | 2017-11-18 01:39

能建立关系

支持(0) 反对(0) 弗朗西斯 | 园豆:495 (菜鸟二级) | 2017-11-18 09:25

@任冠宇: 哦哦😯 谢谢

支持(0) 反对(0) 至尊宝" | 园豆:208 (菜鸟二级) | 2017-11-18 11:11
0

默认的不就是级联查询么?(hibernate中也叫对象导航查询),只需要配好关系映射,里面的对象可以自动获取到,不过默认是懒加载的!

夜半风起 | 园豆:222 (菜鸟二级) | 2017-11-18 12:15

你的user中有一个list集合,集合里有多个role对象,你查出来的是一个user的list集合,从user集合中遍历user,从单个user中拿role集合,遍历role集合,不就拿到了么?不过注意的一般是对象导航查询是懒加载的,不要超过session的作用域!

支持(0) 反对(0) 夜半风起 | 园豆:222 (菜鸟二级) | 2017-11-18 12:27

@夜半风起: 默认是懒加载没错,那如何让user把roleList初始化?  我知道用hql初始化,但是如果用hql,就跟我现在的写法起冲突,因为hql的会创建3个类,我现在不用hql就只创建2个类

 

我记得hibernate有一个可以初始化user里面集合的方法

支持(0) 反对(0) 弗朗西斯 | 园豆:495 (菜鸟二级) | 2017-11-21 15:01
0

@ManyToMany这个注解不就是做这个 工作的吗??? 你可以认为拿到User的是已经拿到了role的list 只不过hibernate默认延时加载 只有当你调用role list的时候才会再访问一次数据库拿数据

初学者max | 园豆:257 (菜鸟二级) | 2017-11-21 14:13
0

 把自己以前的问题解决下,hibernate确实有一个初始化函数,但是使用了初始化函数,会让代码显得很冗余,后来我也没用.

现在回头看下这个问题,其实还是需要把集合的lazy="true".不过我也没验证过,设置成true会有什么效果,感兴趣的同学可以继续验证下.

弗朗西斯 | 园豆:495 (菜鸟二级) | 2019-09-27 17:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册