【发布时间】:2017-08-10 07:55:04
【问题描述】:
我是java和spring的新手。我的第一个练习是模拟网络电话簿的项目。我坚持将联系人分配给特定用户,然后再显示该特定用户的联系人。任何想法或指南都表示赞赏。
用户类
@Entity
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private String lastName;
private String email;
private String username;
private String password;
@Transient
private String retypePassword;
@ManyToMany(fetch = FetchType.EAGER,cascade=CascadeType.ALL)
@JoinTable(name="users_roles",
joinColumns = {@JoinColumn(name="user_id", referencedColumnName="id")},
inverseJoinColumns = {@JoinColumn(name="role_id", referencedColumnName="roles_id")}
)
private List<Rolee> authorities;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "userForPhonebook")
@Fetch(value = FetchMode.SUBSELECT)
private Collection<Contact> allContacts;
// getters and setters
联系班级
@Entity
public class Contact implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int contactID;
private String name;
private String lastName;
private String email;
private String areaCode;
private String telNumber;
private String adress;
private String city;
private String note;
private String contactImage;
@JoinColumn(name = "users_id")
@ManyToOne(fetch = FetchType.EAGER, optional = false)
private User userForPhonebook;
// getters and setters
ContactServiceImpl 类
@Service
public class ContactServiceImpl implements ContactService {
@Autowired
private ContactDAO contactDAO;
@Autowired
private UserDAO userDAO;
@Autowired
private ServletContext context;
@Override
public void addContact(ContactModel contactModel, MultipartFile[] contactImages, User user) {
Contact contact = new Contact();
/*
creating contact
*/
User user2 = userDAO.userGetById(user.getId()); //<-- i cant get user id
contact.setUserForPhonebook(user2);
// --------------------------------
User u = new User(); //
u.setId(2); // hard coding users id...
contact.setUserForPhonebook(u); // and its working fine
// rest of code to create contact ...
用户DAOImpl
// ...
@Override
public void addUser(User user) {
Session s = getCurrentSession();
Transaction trans = s.beginTransaction();
getCurrentSession().save(user);
trans.commit();
}
// ...
用户服务实现
// ...
@Override
public void addUser(UserModel userModel) {
User user = new User();
// creating user ...
getUserDAO().addUser(user);
}
// ...
注册控制器
// ...
@RequestMapping(value = "/addUser", method = RequestMethod.POST)
public String postRegister(@Valid @ModelAttribute("newUser") UserModel userModel, BindingResult results, ModelMap model) {
if (results.hasErrors()) {
return "addUser";
}
// checking if username, email exist in database ...
// password matching
getUserService().addUser(user);
return "index";
}
// ...
联系人控制器
// ...
@RequestMapping(value = "/addContact", method = RequestMethod.POST)
public String postAddContact(@Valid @ModelAttribute("addContact") ContactModel contactModel, BindingResult results, HttpServletRequest request, @RequestParam("contactImages") MultipartFile[] contactImages, User user)
throws FileNotFoundException, IOException {
if (results.hasErrors()) {
return "addContact";
}
getContactService().addContact(contactModel, contactImages, user);
return "redirect:phoneBook";
}
//...
【问题讨论】:
-
当你保存你的用户时,你是在更新你的本地对象吗?喜欢
user = userDao.save(user);或int id = userDao.save(user); user.setId(id);,然后将它们发送到addContact?。最好在你的控制器中有一个使用示例。 -
我也在尝试使用 get.Principal 的活动用户,但我无法将其投射给我的用户。我知道主体通常用于用户名和密码,但我不得不尝试:)
-
说“我被卡住了”并张贴一堵代码并不是很清楚。您面临的具体问题是什么?
-
@JBNizet 我试图在用户添加新联系人时将联系人绑定到用户,所以当打开电话簿时,它只显示特定用户的联系人
标签: spring