繁体   English   中英

如何使用Hibernate多对多方法将jsp页面中多个select标记中的数据保存到DB

[英]How to save data from multiple select tag in jsp page to DB using Hibernate many-to-many

我想使用hibernate映射将用户保存到数据库中: 多对多

POJO的:

Users.java

@Entity
@Table(name = "users_db")
public class Users implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_user", unique = true, nullable = false)
private long id;

@Column(name = "userName_db")
private String userName;

@Column(name = "email_db")
private String Email;

private String password;

@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "userskill", joinColumns = {
        @JoinColumn(referencedColumnName = "id_user", nullable = false) }, inverseJoinColumns = {
                @JoinColumn(referencedColumnName = "id") })
private Set<Skills> skills = new HashSet<Skills>();
// getters ans setters

Skills.java

@Entity
@Table(name = "skillsDB", uniqueConstraints = @UniqueConstraint (columnNames ="typeSkill") )
public class Skills implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "typeSkill")
private String typeSkill;

@ManyToMany(mappedBy = "skills")
private Set<Users> users = new HashSet<Users>();
// getters and setters

addUserServlet.java

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    UserService userService = new UserServiceImpl();

    Users user = new Users();

    user.setUserName(request.getParameter("UserName"));
    user.setEmail(request.getParameter("Email"));
    user.setPassword(request.getParameter("Password"));

    Set<Skills> skillSet = new HashSet<Skills>();

    for (int i = 0; i < request.getParameterValues("skills").length; i++) {
        skillSet.add(new Skills(request.getParameterValues("skills")[i]));
    }
    user.setSkills(skillSet);
    userService.add(user);
    request.setAttribute("usersList", userService.showUsers());
    this.getServletContext().getRequestDispatcher("/addUser.jsp").forward(request, response);

}

用户DAOImpl.java

public List<Users> showUsers() {

    List<Users> result = session.createCriteria(Users.class).list();
    return result;

}

休眠配置

<hibernate-configuration>

<session-factory>

    <!-- Database connection settings -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/dictionnaire</property>
    <property name="connection.username">root</property>
    <property name="connection.password">mosab</property>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="use_sql_comments">true</property>

    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>

    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

    <!-- Disable the second-level cache -->
    <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>

    <!-- Drop and re-create the database schema on startup -->
    <property name="hbm2ddl.auto">update</property>

    <!-- Names the annotated entity class -->
    <mapping resource="com.entity.Users" />
    <mapping resource="com.entity.Skills" />

</session-factory>

addUser.jsp

在选择标签中,我从数据库中获取数据

<form action="adduser" method="post">
    <table>
        <tr>
            <td><label for="name">User name :* </label></td>
            <td><input type="text" name="UserName" /></td>
        </tr>
        <tr>

            <td><label for="Email">Email :* </label></td>
            <td><input type="text" name="Email" /></td>
        </tr>
        <tr>
            <td><label for="Password">Password :*</label></td>
            <td><input type="password" name="Password" /></td>
        </tr>
        <tr>
            <td><label for="skills">skills :</label></td>
            <td><select name="skills" multiple="multiple">
                    <c:forEach var="item" items="${skills }">
                        <option value="${item.typeSkill}" ><c:out value="${item.typeSkill}"/></option>
                    </c:forEach>
            </select></td>  
        </tr>
        <tr>
            <td><input type="submit" name="Save" /></td>
        </tr>
    </table>
</form>
<table>
    <thead>
        <tr>
            <th>Id User</th>
            <th>User name</th>
            <th>password</th>
            <th>email</th>
            <th>Skills</th>
        </tr>
    </thead>
    <tbody>
        <c:forEach var="item" items="${usersList}">
            <tr>
                <td><c:out value="${item.id}" /></td>
                <td><c:out value="${item.userName}" /></td>
                <td><c:out value="${item.password}" /></td>
                <td><c:out value="${item.email}" /></td>
                <td><c:out value="${item.skills}" /></td>
            </tr>
        </c:forEach>
    </tbody>
</table>

问题:当我填写输入内容并选择一些技能时,提交后,在表格中我成功获得了ID,名称,电子邮件,密码,但是技能类似:

如果我选择一项技能: [com.entity.Skills@60b7080b]

如果我选择两个技能: [com.entity.Skills @ 60b7080b,com.entity.Skills @ 5e0659ab]

因此,我希望这对您来说很清楚。

谢谢Dragan Bozanovic的帮助,但我自己找到了解决方案:

<c:forEach var="item" items="${usersList}">
                <tr>
                    <td><c:out value="${item.id}" /></td>
                    <td><c:out value="${item.userName}" /></td>
                    <td><c:out value="${item.password}" /></td>
                    <td><c:out value="${item.email}" /></td>
                    <td><c:forEach var="skill" items="${item.skills}">
                            <c:out value="${skill.typeSkill}"/> 
                        </c:forEach></td>
                </tr>
    </c:forEach>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM