一对多的Hibernate问题

时间:2016-10-31 20:16:15

标签: hibernate spring-mvc one-to-many many-to-one

我的用户表是

@Entity
@Table(name = "PERSON")
public class User implements Serializable {
    private static final long serialVersionUID = 1L;    
    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Column(name = "NAME")
    private String name;
    @Column(name = "USER_ID")
    private String userId;
    @Column(name = "PASSWORD")
    private String password;
    @Column(name = "EMAIL")
    private String email;
    @Column(name = "ROLE")
    private String role;
    @Column(name = "DEPARTMENT")
    private String department;

    private Roles roles;

    public User() {
    }

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getDepartment() {
        return department;
    }
    public void setDepartment(String department) {
        this.department = department;
    }
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }       

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }


    @JoinColumn(name  = "RID")
    public Roles getRoles() {
        return roles;
    }

    public void setRoles(Roles roles) {
        this.roles = roles;
    }
}

我的角色类是

@Entity
@Table(name = "ROLES")
public class Roles implements Serializable {

    private static final long serialVersionUID = 1L;

    private int rid;
    private String role;
    private String description;

    // list of child class members
    private List<User> user;

    // map the child class[User] with java.util.Collection. Here we r using SET
    // private Set<User> users;

    // no arg constructor
    public Roles() {
    }
    @Id
    @Column(name = "RID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    public int getRid() {
        return rid;
    }
    public void setRid(int rid) {
        this.rid = rid;
    }   

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    public List<User> getUser() {
        return user;
    }
    public void setUser(List<User> user) {
        this.user = user;
    }

    @Column(name = "role")
    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    @Column(name = "Description")
    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

}

从此admin.jsp中单击控件转到/ users maping的用户

<body>
    <h1>Admin Page</h1>
    You can do the followings:

    <form:form action="/users" method="post" ModelAttribute="user" >

        <table border="1" >
            <tr>
                <td><a href="findUserById"> Find a User</a></td>
            </tr>

            <tr>
                <td><a href="users">Edit a User</a></td>
            </tr>

            <tr>
                <td><a href="users">Update a User</a></td>
            </tr>

            <tr>
                <td><a href="users"> Delete a User</a></td>
            </tr>

            <tr>
                <td><a href="users">List of all the Users</a></td>
            </tr>

        </table>
    </form:form>

</body>

控制器映射是:

@RequestMapping(value = "/users", method = RequestMethod.GET)
    public String usersList(@ModelAttribute("user") User user, BindingResult result, Model model) {     
        List<User> userList = userService.listPersons();        
        // attribute goes to jsp
        model.addAttribute("userList", userList);       
        // return jsp page
        return "users";
    }

users.jsp是

<body>
<h2>List of Users</h2>
<form:form modelAttribute="user" method="GET" >
    <table>
        <thead style="background: #fcf">
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>User Id</th>
                <th>Password</th>
                <th>Email</th>
                <th>Department</th>
                <th>Role</th>
                <th>Update</th>
                <th>Delete</th>

            </tr>
        </thead>
        <c:forEach items="${userList}" var="user">
            <tr>
                <td>${user.id}</td>
                <td>${user.name}</td>
                <td>${user.userId}</td>
                <td>${user.password}</td>
                <td>${user.email}</td>
                <td>${user.department}</td>
                <td>${user.role}</td>

                <td><a href="<c:url value='/user/edit/${user.id}' />">Edit</a></td>
                <td><a href="<c:url value='/delete/${user.id}' />">Delete</a></td>
            </tr>
</c:forEach>
</table>
</form:form>
</body>

我正在尝试使用Hibernate进行一对多的关联。一个角色可以给予许多用户,因此角色是父实体,而用户是子实体。我有两个表User和Roles ...当我运行应用程序时,我得到了这个

INFO: Server startup in 8273 ms
WARN : org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 1054, SQLState: 42S22
ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Unknown column 'user0_.roles' in 'field list'

其他部分运行正常的应用程序。我该怎么办呢?我做错了什么。请帮忙。

2 个答案:

答案 0 :(得分:0)

@ManyToOne添加到User类:

@ManyToOne
private Roles roles;

mappedBy课程中添加Roles

@OneToMany(mappedBy = "roles",fetch = FetchType.LAZY, cascade = CascadeType.ALL)
public List<User> getUser() {

答案 1 :(得分:0)

在您的用户类中:

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
@JoinColumn(name = "RID")
List<Rol> roles;

在你的Rol课程中:

@OneToMany(mappedBy="roles", fetch = FetchType.LAZY)
@JsonIgnore
private List<User> users;

这应该有效