2016-10-31 6 views
0

Мой стол пользовательодин ко многим вопрос Hibernate

@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 щелкать пользователей управление переходит к/пользователей картографирования

<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. Одна Роль может быть предоставлена ​​многим Пользователям, поэтому Роли - это родительский объект, а Пользователь - дочерний объект. У меня есть две таблицы и роли пользователей ... когда я запустить приложение я получаю это

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' 

Другие части работать нормально приложения. Как мне это сделать? что я делаю неправильно. Пожалуйста помоги.

ответ

0

Добавить @ManyToOne в User класс:

@ManyToOne 
private Roles roles; 

Добавить mappedBy в Roles классе:

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

я получаю это: Ошибка: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Неизвестный столбец «user0_.roles_RID» в «списке поля» – javaz

+0

Скорее всего делать с этой линией @Column (name = "RID"). Проверьте, что у вас есть правильное имя столбца, написанное в соответствии с табличной структурой. – Aeseir

+0

Я предполагаю, что это что-то связано с первичным ключом и внешним ключом ... но я не знаю, что делать или как делать? – javaz

0

В классе User:

@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; 

Это должно работать

+0

Мне нужно создать промежуточную таблицу [user_roles] или hibernate будет генерировать самостоятельно? Также в моих таблицах таблица идентификаторов пользователя и таблица RID из ролей - это просто PK, нет FK – javaz

+0

, вам нужно создать промежуточную таблицу – cralfaro

Смежные вопросы