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加载出来?
我认为HQL是一个错误的方向,直接通过Hibernate中对象的方法获取数据才是最方便的。
结贴。
怎么你的类注解的写法和我学的写法格式不一样呢。 这样写也能建立类与数据库的映射关系吗
能建立关系
@任冠宇: 哦哦😯 谢谢
默认的不就是级联查询么?(hibernate中也叫对象导航查询),只需要配好关系映射,里面的对象可以自动获取到,不过默认是懒加载的!
你的user中有一个list集合,集合里有多个role对象,你查出来的是一个user的list集合,从user集合中遍历user,从单个user中拿role集合,遍历role集合,不就拿到了么?不过注意的一般是对象导航查询是懒加载的,不要超过session的作用域!
@夜半风起: 默认是懒加载没错,那如何让user把roleList初始化? 我知道用hql初始化,但是如果用hql,就跟我现在的写法起冲突,因为hql的会创建3个类,我现在不用hql就只创建2个类
我记得hibernate有一个可以初始化user里面集合的方法
@ManyToMany这个注解不就是做这个 工作的吗??? 你可以认为拿到User的是已经拿到了role的list 只不过hibernate默认延时加载 只有当你调用role list的时候才会再访问一次数据库拿数据