我在数据库中有一个表:
> < li>
用户角色(字典)
用户登录
用户简介
用户
如何将值插入上述三个表?
我尝试了这样的东西:
控制器:
@Autowired
private UserProfilesService userProfilesService;
@Autowired
private D_UserRolesService d_UserRolesService;
@Autowired
private UserLoginsService loginsService;
@Autowired
private UsersService usersService;
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String getAddNewUserForm(Model model) {
UserProfiles userProfiles = new UserProfiles();
UserLogins userLogins = new UserLogins();
Users users = new Users();
model.addAttribute("userProfiles", userProfiles);
model.addAttribute("users", users);
model.addAttribute("userLogin", userLogins);
model.addAttribute("userRoless", d_UserRolesService.getAllRoles());
return "userNew";
}
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String processAddNewUserForm(@ModelAttribute("userProfiles") UserProfiles profileToBeAdded,
@ModelAttribute("userLogin") UserLogins loginToBeAdded, @ModelAttribute("users") Users userToBeAdded,
HttpServletRequest request) {
userProfilesService.addUser(profileToBeAdded);
loginsService.AddOrUpdateUser(loginToBeAdded);
usersService.AddOrUpdateUser(userToBeAdded);
return "redirect:/users";
}
JSP页面:
<form:form class="form-horizontal" >
<fieldset>
<legend>New user</legend>
<!-- Login -->
<form:form modelAttribute="userLogin">
<form:hidden path="idLogin"/>
<div class="form-group">
<label class="control-label col-lg-2" for="Email">E-mail</label>
<div class="col-lg-10">
<form:input id="Email" path="Email" type="text" class="form:input-large"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-2" for="Password">Password</label>
<div class="col-lg-10">
<form:password id="Password" path="Password" class="form:input-large"/>
</div>
</div>
</form:form>
<!-- Profile -->
<form:form modelAttribute="userProfiles">
<form:hidden path="id"/>
<div class="form-group">
<label class="control-label col-lg-2" for="FirstName">FirstName</label>
<div class="col-lg-10">
<form:input id="FirstName" path="FirstName" type="text" class="form:input-large"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-2" for="LastName">LastName</label>
<div class="col-lg-10">
<form:input id="LastName" path="LastName" type="text" class="form:input-large"/>
</div>
</div>
</form:form>
<!-- Users -->
<form:form modelAttribute="users">
<form:hidden path="idUser"/>
<div class="form-group">
<label class="control-label col-lg-2" for="idUserRole">Role</label>
<div class="col-lg-10">
<form:select path="userRole" items="${userRoless}"
itemValue="IdUserRole" itemLabel="name" multiple="false"
class="span12">
</form:select>
</div>
<div class="form-group">
<label class="control-label col-lg-2" for="IdLogin">Id</label>
<div class="col-lg-10">
<form:input id="userLogin" path="userLogin" type="text" class="form:input-large"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-2" for="IdLogin">Id</label>
<div class="col-lg-10">
<form:input id="userProfile" path="userProfile" type="text" class="form:input-large"/>
</div>
</div>
</div>
</form:form>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<input type="submit" id="btnAdd" class="btn btn-primary" value ="Add"/>
</div>
</div>
</fieldset>
</form:form>
注意:如果您将表示每个表的java类添加到您的问题中,那将非常有帮助。
您应该添加描述您的表如何与您的类(pojos)相关的元数据,并将Cas的类型
设置为持续
或ALL
例如:
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
@JoinColumn(name = "user_roles", referencedColumnName = "id")
private UserRoles userRole;
@OneToOne(cascade = CascadeType.ALL, optional = false, fetch = FetchType.EAGER, orphanRemoval =
true)
@JoinColumn(name = "id_user_login", referencedColumnName = "id")
private UserLogin userLogin;
@OneToOne(cascade = CascadeType.ALL, optional = false, fetch = FetchType.EAGER, orphanRemoval =
true)
@JoinColumn(name = "id_user_profile", referencedColumnName = "id")
private UserProfile userProfile;
然后,您可以设置子类/表的相应值,并插入父类/表:
Users user = new Users();
UserProfile myUserProfile = new UserProfile();
UserLogin myUserLogin = new UserLogin();
UserRole myUserRole = new UserRole();
//... set the values ...
//then:
user.setUserProfile(myUserProfile);
user.setUserLogin(myUserLogin);
user.setUserRole(myUserRole);
[编辑]
我不确定您如何持久化您的对象,但我假设您在服务(userProfilesService
等)中这样做。
你可以把我上面写的放在你下面的方法中。
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String getAddNewUserForm(Model model) {
UserProfiles userProfiles = new UserProfiles();
UserLogins userLogins = new UserLogins();
Users users = new Users();
//Here
users.setUserProfile(userProfiles);
users.setUserLogins(userLogins);
userLogins.setUsers(users);
userProfiles.setUsers(users);
model.addAttribute("userProfiles", userProfiles);
model.addAttribute("users", users);
model.addAttribute("userLogin", userLogins);
model.addAttribute("userRoless", d_UserRolesService.getAllRoles());
return "userNew";
}
2.或
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String processAddNewUserForm(@ModelAttribute("userProfiles") UserProfiles profileToBeAdded,
@ModelAttribute("userLogin") UserLogins loginToBeAdded, @ModelAttribute("users") Users userToBeAdded,
HttpServletRequest request) {
//Or here
userToBeAdded.setUserProfile(profileToBeAdded);
userToBeAdded.setUserLogins(loginToBeAdded);
loginToBeAdded.setUsers(userToBeAdded);
profileToBeAdded.setUsers(userToBeAdded);
userProfilesService.addUser(profileToBeAdded);
loginsService.AddOrUpdateUser(loginToBeAdded);
usersService.AddOrUpdateUser(userToBeAdded);
return "redirect:/users";
}
[编辑2]
正如@Amogh指出的,你的观点也有问题。据我所知,即使在JSP/JSF中,你也应该有类似下面这样的代码:
请注意:我不知道Spring,并且已经很长时间没有使用JSP/JSF了,所以这可能不是完全准确或最有效的方法。
<form:form class="form-horizontal" modelAttribute="users">
<fieldset>
<legend>New user</legend>
<!-- Login -->
<form:hidden path="idLogin"/>
<div class="form-group">
<label class="control-label col-lg-2" for="Email">E-mail</label>
<div class="col-lg-10">
<form:input id="Email" path="users.userLogin.email" type="text" class="form:input-large"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-2" for="Password">Password</label>
<div class="col-lg-10">
<form:password id="Password" path="users.userLogin.password" class="form:input-large"/>
</div>
</div>
</fieldset>
<fieldset>
<!-- Profile -->
<form:hidden path="id"/>
<div class="form-group">
<label class="control-label col-lg-2" for="FirstName">FirstName</label>
<div class="col-lg-10">
<form:input id="FirstName" path="users.userProfile.firstName" type="text" class="form:input-large"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-2" for="LastName">LastName</label>
<div class="col-lg-10">
<form:input id="LastName" path="users.userProfile.lastName" type="text" class="form:input-large"/>
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<input type="submit" id="btnAdd" class="btn btn-primary" value ="Add"/>
</div>
</div>
</fieldset>
</form:form>
我想在交叉表中插入大量的实体。为此,我想启用Hibernate的批处理插入选项,这样每次插入将不是添加1行,而是一次添加20或50行。 我正在尝试重现Hibernate教程的结果。我创建了一个测试函数,它将尝试插入30个客户,就像在示例中一样: Customer类没有生成的ID。 在收到Vlad Mihalcea的回答后,我意识到是的,事实上批处理语句是有效的,至少在hibernate和jdbc级
问题内容: 我正在循环列表并将其插入数据库中,但它得到的更新记录一个接一个。最后我只在列表中的数据库最后一条记录中看到。 输入名称:Linux,Windows,Mac hibernate.cfg.xml: 这里有3次获得循环并插入数据库。但是以某种方式覆盖了这些值。因为我看到sql插入和更新在控制台中运行。 请帮助我将多个行插入数据库。 问题答案: Hibernate文档中有一章非常好的关于批处理
我在postgreSQL DB(9.2)中有一个表,其中列类型为json。我正在使用Hibernate,并实现了Tim Fulmer建议的将postgreSQL JSON列映射到Hibernate值类型的代码示例,但我不断得到以下异常: 我不想强制转换表达式,因为不建议使用它。当我使用预先生成的表并且列类型为JSON时,我得到了这个错误。当我更改Hibernate配置以构建表时,我没有得到异常,值
问题内容: 有人可以告诉我,以下JDBC代码中的第一个条件是否是针对两个不同的表执行两个不同的SQL查询? 问题答案: 在我的书中,我总是建议关闭已经打开的资源,以避免可能的泄漏。 一种更现代的方法是使用try-with- resources :
现在我想在文本框中输入一些日期,并在下拉列表中选择一些值。 当我点击它应该得到保存到数据库。 我该怎么做? 这是我的密码 php插入代码:当我点击提交时,这个php代码应该 下拉列表是动态生成的 代码: ui看起来像这样...
问题内容: 我创建了一个数据库名称movielibrarysystem,其中有3个表。 分别是类型,发布者和电影...现在1个发布者可以有很多电影,而1个电影则有很多类型..在movie表中,发布者ID和typeid都充当外键。 我的问题是,如何在电影表中插入数据…我已经将数据插入到发行商和类型表中,但是我无法插入电影表中。 问题答案: 这就是你要做的。首先,发行人与电影之间的关系是一对多的-