Java 带透视表的高级JPA

Java 带透视表的高级JPA,java,spring,jpa,Java,Spring,Jpa,我有5个实体,用户、角色、权限、用户角色、权限角色,我如何构造一个JPA类来使用透视表获取数据 公共类角色实现可序列化{ //@OneToMany(mappedBy=“role\u id”) //私人收藏许可证私人收藏 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "id") private Integer id; @Size(max = 100) @

我有5个实体,用户、角色、权限、用户角色、权限角色,我如何构造一个JPA类来使用透视表获取数据

公共类角色实现可序列化{

//@OneToMany(mappedBy=“role\u id”) //私人收藏许可证私人收藏

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Size(max = 100)
@Column(name = "name")
private String name;
@Size(max = 50)
@Column(name = "code")
private String code;
@Size(max = 255)
@Column(name = "brief")
private String brief;
@Size(max = 8)
@Column(name = "status")
private String status;
@Basic(optional = false)
@NotNull
@Column(name = "date_created")
@Temporal(TemporalType.TIMESTAMP)
private Date dateCreated;
@Column(name = "date_updated")
@Temporal(TemporalType.TIMESTAMP)
private Date dateUpdated;

@JoinColumn(name = "created_by", referencedColumnName = "id")
@ManyToOne
private User createdBy;
@JoinColumn(name = "updated_by", referencedColumnName = "id")
@ManyToOne
private User updatedBy;

@ManyToOne
@JoinTable(name = "permission_role",
        joinColumns = @JoinColumn(name = "userid",
                referencedColumnName = "userid"),
        inverseJoinColumns = @JoinColumn(name = "groupid",
                referencedColumnName = "groupid")
)
private Collection<PermissionRole> permissionRoles;

public Roles() {
}

public Roles(Integer id) {
    this.id = id;
}

public Roles(Integer id, Date dateCreated) {
    this.id = id;
    this.dateCreated = dateCreated;
}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getName() {
    return name;
}

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

public String getCode() {
    return code;
}

public void setCode(String code) {
    this.code = code;
}

public String getBrief() {
    return brief;
}

public void setBrief(String brief) {
    this.brief = brief;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public Date getDateCreated() {
    return dateCreated;
}

public void setDateCreated(Date dateCreated) {
    this.dateCreated = dateCreated;
}

public Date getDateUpdated() {
    return dateUpdated;
}

public void setDateUpdated(Date dateUpdated) {
    this.dateUpdated = dateUpdated;
}


public User getCreatedBy() {
    return createdBy;
}

public void setCreatedBy(User createdBy) {
    this.createdBy = createdBy;
}

public User getUpdatedBy() {
    return updatedBy;
}

public void setUpdatedBy(User updatedBy) {
    this.updatedBy = updatedBy;
}


@Override
public int hashCode() {
    int hash = 0;
    hash += (id != null ? id.hashCode() : 0);
    return hash;
}

@Override
public boolean equals(Object object) {
    // TODO: Warning - this method won't work in the case the id fields are not set
    if (!(object instanceof Roles)) {
        return false;
    }
    Roles other = (Roles) object;
    return !((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id)));
}

@Override
public String toString() {
    return "myproperty.v1.db._entities.Roles[ id=" + id + " ]";
}
@Id
@GeneratedValue(策略=GenerationType.IDENTITY)
@基本(可选=假)
@列(name=“id”)
私有整数id;
@尺寸(最大值=100)
@列(name=“name”)
私有字符串名称;
@尺寸(最大值=50)
@列(name=“code”)
私有字符串码;
@尺寸(最大值=255)
@列(name=“brief”)
私人字符串摘要;
@尺寸(最大=8)
@列(name=“status”)
私有字符串状态;
@基本(可选=假)
@NotNull
@列(name=“创建日期”)
@时态(TemporalType.TIMESTAMP)
创建私人日期;
@列(name=“date\u updated”)
@时态(TemporalType.TIMESTAMP)
私人日期更新;
@JoinColumn(name=“创建人”,referencedColumnName=“id”)
@许多酮
由用户创建的私有用户;
@JoinColumn(name=“更新人”,referencedColumnName=“id”)
@许多酮
私人用户更新人;
@许多酮
@JoinTable(name=“权限\角色”,
joinColumns=@JoinColumn(name=“userid”,
referencedColumnName=“userid”),
inverseJoinColumns=@JoinColumn(name=“groupid”,
referencedColumnName=“groupid”)
)
私人收藏许可证角色;
公共角色(){
}
公共角色(整数id){
this.id=id;
}
公共角色(整数id、创建日期){
this.id=id;
this.dateCreated=dateCreated;
}
公共整数getId(){
返回id;
}
公共无效集合id(整数id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getCode(){
返回码;
}
公共无效设置码(字符串码){
this.code=代码;
}
公共字符串getBrief(){
回信摘要;
}
公共无效设置(字符串摘要){
this.brief=简短;
}
公共字符串getStatus(){
返回状态;
}
公共无效设置状态(字符串状态){
这个状态=状态;
}
公共日期getDateCreated(){
已创建的返回日期;
}
公共作废setDateCreated(创建日期){
this.dateCreated=dateCreated;
}
公共日期getDateUpdate(){
更新返回日期;
}
公共void setDateUpdated(日期更新){
this.dateUpdated=dateUpdated;
}
公共用户getCreatedBy(){
返回createdBy;
}
公共void setCreatedBy(用户createdBy){
this.createdBy=createdBy;
}
公共用户getUpdatedBy(){
返回更新人;
}
public void setUpdatedBy(用户更新人){
this.updatedBy=updatedBy;
}
@凌驾
公共int hashCode(){
int hash=0;
hash+=(id!=null?id.hashCode():0);
返回散列;
}
@凌驾
公共布尔等于(对象){
//TODO:警告-如果未设置id字段,此方法将不起作用
if(!(角色的对象实例)){
返回false;
}
角色其他=(角色)对象;
return!((this.id==null&&other.id!=null)| |(this.id!=null&&!this.id.equals(other.id)));
}
@凌驾
公共字符串toString(){
返回“myproperty.v1.db._entities.Roles[id=“+id+”]”;
}

}

我想您希望在用户和角色之间以及角色和权限之间建立多对多关系。如果您要声明@ManyToMany注释,hibernate将知道如何创建一个中间表

此外,您还可以通过编程方式创建“内部”表,并在用户到内部和@OneToMany从角色到内部之间添加注释,以及使用权限添加注释