首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ManyToMany的MappingException

使用ManyToMany的MappingException
EN

Stack Overflow用户
提问于 2012-11-16 22:58:56
回答 1查看 701关注 0票数 1

我正在使用JBoss AS 7和IDEA 11。当我尝试部署我的应用程序时,我遇到了这样的问题:

我的应用程序中有两个实体:

首先:

代码语言:javascript
复制
@Entity
@Table(name="users")
public class User extends AbstractEntity {

    private static final long serialVersionUID = -3839809902040717567L;

    @Column(name="email") private String email;
    @Column(name="first_name") private String firstName;
    @Column(name="last_name") private String lastName;
    @Column(name="middle_name") private String middleName;
    @Column(name="password") private String password;
    @Column(name="client_id") private int clientId;
    @Column(name="user_name") private String userName;
    private List<Role> roles;

    public User() {
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getFirstName() {
        return firstName;
    }

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

    public String getLastName() {
        return lastName;
    }

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

    public String getMiddleName() {
        return middleName;
    }

    public void setMiddleName(String middleName) {
        this.middleName = middleName;
    }

    public String getPassword() {
        return password;
    }

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

    public int getClientId() {
        return clientId;
    }

    public void setClientId(int clientId) {
        this.clientId = clientId;
    }

    public String getUserName() {
        return userName;
    }

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

    @ManyToMany(cascade = {CascadeType.ALL})
    @JoinTable(name = "users_roles",
            joinColumns = {@JoinColumn(name = "user_id")},
            inverseJoinColumns = @JoinColumn(name = "role_id"))
    public List<Role> getRoles() {
        return roles;
    }

    public void setRoles(List<Role> roles) {
        this.roles = roles;
    }
}

第二:

代码语言:javascript
复制
@Entity
@Table(name="roles")
public class Role extends AbstractEntity {

    private static final long serialVersionUID = -192049947690313026L;

    @Column(name="ad_name") private String  adName;
    @Column(name="description") private String description;
    @Column(name="name") private String name;
    @OneToMany(mappedBy = "roles") private List<RolesPermissions> rolesPermissions;
    @ManyToMany(mappedBy = "roles") List<User> users;


    public String getAdName() {
        return adName;
    }

    public void setAdName(String adName) {
        this.adName = adName;
    }

    public String getDescription() {
        return description;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<User> getUsers() {
        return users;
    }

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

    public List<RolesPermissions> getRolesPermissions() {
        return rolesPermissions;
    }

    public void setRolesPermissions(List<RolesPermissions> rolesPermissions) {
        this.rolesPermissions = rolesPermissions;
    }

}

他们有ManyToMany关系。

在部署时,我遇到了这样的异常:

代码语言:javascript
复制
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.List, at table: users, for columns: [org.hibernate.mapping.Column(roles)]
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:304)
    at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:288)
    at org.hibernate.mapping.Property.isValid(Property.java:216)

可能的原因是什么?

P.S. AbstractEntitymappedsuperclass,并且具有带有@Id注释的字段。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-16 23:02:16

您的User实体没有注释roles关系。@ManyToMany注释应该可以做到这一点。

正如@Perception指出的那样,您可能还希望在roles上分隔连接表,例如:

代码语言:javascript
复制
@JoinTable(name="USER_ROLE", joinColumns= @JoinColumn(name="EMP_ID"), inverseJoinColums = @JoinColumn(name="ROLE_ID"))

编辑:只有在使用现有模式或者默认的表名和列名不适合您的情况下,此注释才有意义。如果您让Hibernate生成表,则可以安全地省略@JoinTable注释。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13419080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档