Я пытаюсь сопоставить таблицы в классе pojo, но получаю исключение для одного атрибута. Классы Pojo

Пользователи :

@Entity
@Table(name = "Users")
public class Users implements java.io.Serializable {

    private int userId;
    private Role role;
    private Groups groupId;
    private UserType userType;
    private String userName;
    private Boolean isActive;



    public Users() {
    }

    public Users(int userId, Role role, Groups groupId ,UserType userType, String userName, boolean isActive) {
        this.userId = userId;
        this.role = role;
        this.groupId = groupId;
        this.userType = userType;
        this.userName = userName;
        this.isActive = isActive;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "UserID", unique = true, nullable = false)
    public int getUserId() {
        return this.userId;
    }

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

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

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

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "GroupId", nullable = false)
    public Groups getGroup() {
        return this.groupId;
    }

    public void setGroup(Groups group) {
        this.groupId = group;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "UserTypeID", nullable = false)
    public UserType getUserType() {
        return this.userType;
    }

    public void setUserType(UserType userType) {
        this.userType = userType;
    }

    @Column(name = "UserName", nullable = false)
    public String getUserName() {
        return this.userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    @Column(name = "IsActive", nullable = false, columnDefinition = "BIT")
    public Boolean isIsActive() {
        return this.isActive;
    }

    public void setIsActive(Boolean isActive) {
        this.isActive = isActive;
    }

    }

Группы:

@Entity
@Table(name = "Groups")
public class Groups implements java.io.Serializable{

    private int groupId;
    private String groupName;
    private String groupDesc;

    private Set<Users> users = new HashSet<Users>(0);

    public Groups (){

    }

    public Groups(int groupId, String groupName, String groupDesc){
        super();
        this.groupId = groupId;
        this.groupName = groupName;
        this.groupDesc = groupDesc;
    }

    public Groups(int groupId, String groupName, String groupDesc, Set<Users> users) {
        super();
        this.groupId = groupId;
        this.groupName = groupName;
        this.groupDesc = groupDesc;
        this.users = users;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name ="GroupID", nullable = false)
    public int getGroupId() {
        return groupId;
    }

    public void setGroupId(int groupId) {
        this.groupId = groupId;
    }

    @Column(name = "GroupName", nullable = false)
    public String getGroupName() {
        return groupName;
    }

    public void setGroupName(String groupName) {
        this.groupName = groupName;
    }

    @Column(name = "GroupDesc", nullable = false)
    public String getGroupDesc() {
        return groupDesc;
    }

    public void setGroupDesc(String groupDesc) {
        this.groupDesc = groupDesc;
    }

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "groupId") //Error
    public Set<Users> getUserse() {
        return this.userse;
    }

    public void setUserse(Set<Users> users) {
        this.users = users;
    }


}

Я отображаю правильную переменную-член класса Users. Но у меня такое исключение

org.hibernate.AnnotationException: mappedBy reference an unknown target     entity property: com.project.pojo.Users.groupId in com.project.pojo.Groups.users

В pojo пользователей у меня есть такие атрибуты, как роль, тип пользователя, которые отображаются без каких-либо исключений. В то время как для группы я получаю это исключение. Может ли кто-нибудь помочь мне разрешить это исключение.

Спасибо :)

1
Deve 23 Дек 2015 в 16:50

4 ответа

Лучший ответ

Проблема в переменных-членах классов, пользователей и групп Измените имя переменной groupId на group в Users.pojo и измените атрибут mappedby на group метод набора классов в группах.

Это решит вашу проблему.

1
no1 31 Дек 2015 в 10:21

Вы определили геттер для объекта Group в bean-компоненте Users как:

@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "GroupId", nullable = false)
    public Groups getGroup() {
        return this.groupId;
    }

Что не лучшее имя для доступа к bean-компоненту.

Попробуйте переименовать объект Group в Users с groupID на group и изменить аннотацию сопоставления на что-то вроде:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "group")
    public Set<Users> getUserse() {
        return this.userse;
    }
0
Danh Thanh Nguyen 23 Дек 2015 в 14:25

В вашем классе Groups вы сначала объявили переменную с именем users как набор Users, и это нормально. Поэтому, если вы собираетесь аннотировать @OneToMany в своих установщиках, имя должно совпадать с именем переменной.

Кроме того, в таблице Users вы создали переменную Groups и назвали ее как groupId, но в таблице Users у вас есть тип int с именем groupId, это выведет из спящего режима и вызовет проблемы. Вы должны переименовать его в:

private Groups group;

Так должно быть так:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "group")
public Set<Users> getUsers() {
    return this.users;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "group", nullable = false)
public Groups getGroup() {
    return this.group;
}

Вы не спрашивали, но вам также нужно исправить свою таблицу RoleID. Я не думаю, что вы действительно понимаете, как работает ORM спящего режима, см. Это:

http://www.mkyong.com/hibernate/hibernate-one-to-many-relationship-example-annotation/

1
OPK 23 Дек 2015 в 14:22

Это должно быть из-за разницы между пользователями и пользователями .

0
MiddleD. 23 Дек 2015 в 14:21