我有一个现有的数据库建模方式如下:
用户 - Id(PK),登录名,密码
locales - Id(PK),descripcion,direccion等...
users_locales - user_id(K),local_id(K)
和实体类如下
用户
@Entity
@Table(name="users")
public class User {
@Id
@GeneratedValue
private Integer id;
private String login;
private String password;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "user_locales", joinColumns = {@JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "local_id") })
private List<Local> userLocales = new ArrayList<Local>();
本地
@Entity
@Table(name="locales")
public class Local {
@Id
@Column(name="id")
@GeneratedValue
private Integer id;
@Column(name="descripcion")
private String descripcion;
@Column(name="direccion")
private String direccion;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "user_locales", joinColumns = {@JoinColumn(name = "local_id") }, inverseJoinColumns = { @JoinColumn(name = "user_id") })
private List<User> localesUser = new ArrayList<User>();
我需要在jsp页面中使用选项select,该页面显示用户登录的“locals”合作伙伴列表,但我无法正确部署它。
这还没有完全开发出来,我做错了一件坏事,因为我无法完全理解hibernate和Spring安全是如何工作的。
需要在“UserService”中创建一个生成列表的服务,这就是我需要的帮助。
我添加了一些我认为可能需要执行此任务的代码段。
userService
public interface UserService {
public User getUser(String login);
}
localServiceImpl
@Transactional
public List<Local> listLocal() {
return localDAO.listLocal();
}
//This just show a list of all Local objects in database
localDAOImpl
@Repository
public class LocalDAOImpl implements LocalDAO {
@Autowired
private SessionFactory sessionFactory;
public List<Local> listLocal() {
return sessionFactory.getCurrentSession().createQuery("from Local")
.list();
}
}
控制器
@RequestMapping(value="/index", method=RequestMethod.GET)
public ModelAndView indexPage( Map<String, Object> map ) {
map.put("localList", localService.listLocal());
return new ModelAndView("home");
}
//Now its pointing to localService and this list all objets in database
home.jsp文件
<select label="Locales" array="Locales" name="Locales">
<c:forEach items="${localList}" var="local">
<option value="${local.localidad}">
<c:out value="${local.descripcion}"/>
</option>
</c:forEach>
</select>
我如何处理与当前用户会话相关的“区域设置”列表?对不起可能的拼写或语法错误。
答案 0 :(得分:1)
目前你正在选择整张桌子。您需要修改localDAO.listLocal()
并将登录作为参数传递,然后修改您的查询并使用该参数来限制输出记录:
public List<Local> listLocal(String userLogin) {
Query query = sessionFactory.getCurrentSession()
.createQuery("select u.userLocales from User u where u.login = ?");
query.setParameter(0, userLogin);
return query.list();
}
Hibernate,Spring或您使用的任何框架都不会自动限制数据。您需要自己为当前用户限制检索的数据。