Hibernate Mappings для стояков2 - PullRequest
0 голосов
/ 12 июля 2010

Я пытаюсь создать страницу входа в систему, используя hibernate и struts2. Мой дизайн выглядит следующим образом. У каждого пользователя входа есть роль. Многие пользователи могут иметь одинаковую роль.
Итак, мой класс:
User.java

@Entity
@Table(name = "user", catalog = "ciner")
public class User implements java.io.Serializable {

    private Integer userId;
    private Role role;
    private String loginId;
    private String password;
    private String firstName;
    private String lastName;

    public User() {
    }

    public User(Role role, String loginId, String password, String firstName, String lastName) {
        this.role = role;
        this.loginId = loginId;
        this.password = password;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "user_id")
    public Integer getUserId() {
        return this.userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    @Column(name = "password", nullable = false)
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "role_id")
    public Role getRole() {
        return this.role;
    }

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

    @Column(name = "login_id", nullable = false, length = 7)
    public String getLoginId() {
        return this.loginId;
    }

    public void setLoginId(String loginId) {
        this.loginId = loginId;
    }

    @Column(name = "first_name", nullable = false, length = 50)
    public String getFirstName() {
        return this.firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    @Column(name = "last_name", nullable = false, length = 50)
    public String getLastName() {
        return this.lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    @Override
    public String toString() {
        return "User{" + "userId=" + userId + "role=" + role + "loginId="
                + loginId + "firstName=" + firstName + "lastName=" + lastName
                + '}';
    }

}

Role.java

@Entity
@Table(name = "role", catalog = "ciner")
public class Role implements java.io.Serializable {

    private Integer roleId;
    private String roleDescription;
    private List users;

    public Role() {
    }

    public Role(String roleDescription) {
        this.roleDescription = roleDescription;
    }

    public Role(String roleDescription, List users) {
        this.roleDescription = roleDescription;
        this.users = users;
    }

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "role_id", unique = true, nullable = false)
    public Integer getRoleId() {
        return this.roleId;
    }

    public void setRoleId(Integer roleId) {
        this.roleId = roleId;
    }

    @Column(name = "role_description", nullable = false, length = 100)
    public String getRoleDescription() {
        return this.roleDescription;
    }

    public void setRoleDescription(String roleDescription) {
        this.roleDescription = roleDescription;
    }

    // @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy =
    // "role")
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "role", targetEntity = User.class)
    public List getUsers() {
        return this.users;
    }

    public void setUsers(List users) {
        this.users = users;
    }

    @Override
    public String toString() {
        return "Role{" + "roleId=" + roleId + "roleDescription="
                + roleDescription + "users=" + users + '}';
    }
}

Возвращает 1 пользователя, если он действителен. Но так как метод возвращает этого пользователя обратно, я использую return users.get(0);

Stack

java.lang.StackOverflowError
    java.lang.Integer.toString(Unknown Source)
    java.lang.Integer.toString(Unknown Source)
    java.lang.String.valueOf(Unknown Source)
    java.lang.Integer.toString(Unknown Source)
    java.lang.String.valueOf(Unknown Source)
    java.lang.StringBuilder.append(Unknown Source)
    com.inhis.model.Role.toString(Role.java:70)
    sun.reflect.GeneratedMethodAccessor293.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
    com.inhis.model.Role_$$_javassist_6.toString(Role_$$_javassist_6.java)
    java.lang.String.valueOf(Unknown Source)
    java.lang.StringBuilder.append(Unknown Source)
    com.inhis.model.User.toString(User.java:97)
    java.lang.String.valueOf(Unknown Source)
    java.lang.StringBuilder.append(Unknown Source)
    java.util.AbstractCollection.toString(Unknown Source)
    org.hibernate.collection.PersistentBag.toString(PersistentBag.java:507)

Скажем, роли
1, несанкционированный
2, менеджер
3, пользователь
Что я делаю неправильно? Кроме того, я хочу назначить им роль по умолчанию 1. Я не мог понять это. Итак, я храню его как ноль сейчас. Как мне этого добиться?

1 Ответ

0 голосов
/ 12 июля 2010

Вы создали бесконечный цикл.Если вы вызываете метод toString для роли, он вызывает метод toString для каждого пользователя, и это снова вызывает toString роли.Возможное решение состоит в том, чтобы удалить это из класса ролей:

"users=" + users +
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...