Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate mappedby复合键_Java_Hibernate_Jpa - Fatal编程技术网

Java Hibernate mappedby复合键

Java Hibernate mappedby复合键,java,hibernate,jpa,Java,Hibernate,Jpa,我想在@OneToMany中使用mapped,但它会引发异常 org.hibernate.MappingException: Unable to read the mapped by attribute for moduleRoles in org.caau.entity.UserModuleRole! 这是我的实体映射。UserModuleRole是复合类。若使用注释代码,程序是正确的。有人帮我解决吗 @Entity @Table(name = "user") public class Us

我想在@OneToMany中使用mapped,但它会引发异常

org.hibernate.MappingException: Unable to read the mapped by attribute for moduleRoles in org.caau.entity.UserModuleRole!
这是我的实体映射。UserModuleRole是复合类。若使用注释代码,程序是正确的。有人帮我解决吗

@Entity
@Table(name = "user")
public class User{
    private long id;
    private Set<UserModuleRole> moduleRoles;

    @Id
    @Column(name = "id", nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    public long getId() {
        return id;
    }

    @OneToMany(fetch = FetchType.EAGER,mappedBy="user")
    //if use under code,program is correct,but i want to use mappedBy!
    //@OneToMany(fetch = FetchType.EAGER)
    //@JoinColumn(name = "user_id")
    public Set<UserModuleRole> getModuleRoles() {
        return moduleRoles;
    }

}

首先,您得到的异常是由于在
UserModuleRole
类中没有任何名为
user
的关系属性

您试图实现的是实体
User
ModuleRole
之间的多对多关系,在您的示例中不需要中间类
UserModuleRole
,因为它持有的唯一字段/属性是对其他两个实体的外键引用

除非您忘记在问题中添加更多信息,否则您应该使用更简单的映射,如下所示:

@Entity
public class ModuleRole {

    private Long id;

    private Set<User> users;

    @Id
    @Column(name = "id")
    public Long getId() {
        return id;
    }

    @ManyToMany
    @JoinTable(name = "user_module_role", 
        joinColumns = @JoinColumn(name = "module_id", referencedColumnName = "id"),
        inverseJoinColumns = @JoinColumn(name = "user_id"), referencedColumnName = "id")
    public Set<Users> getUsers() {
        return users;
    }

}

@Entity
@Table(name = "user")
public class User{
    private Long id;
    private Set<ModuleRole> moduleRoles;

    @Id
    @Column(name = "id", nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    public long getId() {
        return id;
    }

    @ManyToMany(mappedBy = "users")
    public Set<ModuleRole> getModuleRoles() {
        return moduleRoles;
    }

}
@实体
公共类模块{
私人长id;
私人用户;
@身份证
@列(name=“id”)
公共长getId(){
返回id;
}
@许多
@JoinTable(name=“用户\模块\角色”,
joinColumns=@JoinColumn(name=“module\u id”,referencedColumnName=“id”),
inverseJoinColumns=@JoinColumn(name=“user\u id”),referencedColumnName=“id”)
公共集getUsers(){
返回用户;
}
}
@实体
@表(name=“user”)
公共类用户{
私人长id;
私有集模块;
@身份证
@列(name=“id”,nullable=false)
@GeneratedValue(策略=GenerationType.AUTO)
公共长getId(){
返回id;
}
@多人(mappedBy=“用户”)
公共集getModuleRoles(){
返回模块;
}
}

Hibernate将自己处理中间表,您不必担心它,除非您想向关系中添加其他字段,这样会有所帮助。

但是我的用户模块角色有其他字段创建表用户模块角色(user_id int unsigned not null,module_id int unsigned not null,role_id int unsigned not null,add_user_id int unsigned default 1,add_date datetime default'1970/01/01',update_user_id int unsigned default 1,update_date datetime default'1970/01/01');您是否检查了我在答案末尾添加的教程链接?
@Entity
public class ModuleRole {

    private Long id;

    private Set<User> users;

    @Id
    @Column(name = "id")
    public Long getId() {
        return id;
    }

    @ManyToMany
    @JoinTable(name = "user_module_role", 
        joinColumns = @JoinColumn(name = "module_id", referencedColumnName = "id"),
        inverseJoinColumns = @JoinColumn(name = "user_id"), referencedColumnName = "id")
    public Set<Users> getUsers() {
        return users;
    }

}

@Entity
@Table(name = "user")
public class User{
    private Long id;
    private Set<ModuleRole> moduleRoles;

    @Id
    @Column(name = "id", nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    public long getId() {
        return id;
    }

    @ManyToMany(mappedBy = "users")
    public Set<ModuleRole> getModuleRoles() {
        return moduleRoles;
    }

}