首页 新闻 会员 周边 捐助

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

0
[已解决问题] 解决于 2024-08-16 15:13
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加载出来?

renguanyu的主页 renguanyu | 小虾三级 | 园豆:841
提问于:2017-11-18 01:15
< >
分享
最佳答案
0

我认为HQL是一个错误的方向,直接通过Hibernate中对象的方法获取数据才是最方便的。

结贴。

renguanyu | 小虾三级 |园豆:841 | 2024-08-16 15:12
其他回答(3)
0

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

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

能建立关系

支持(0) 反对(0) renguanyu | 园豆:841 (小虾三级) | 2017-11-18 09:25

@任冠宇: 哦哦😯 谢谢

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

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

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

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

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

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

 

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

支持(0) 反对(0) renguanyu | 园豆:841 (小虾三级) | 2017-11-21 15:01
0

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

一腿狗毛 | 园豆:326 (菜鸟二级) | 2017-11-21 14:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册