hibernate视图无主键解决办法

使用hibernate创建视图对应的entity时,一直报 No identifier specified for entity 错。查询发现,hibernate映射表的时候entity必须有主键。

但是视图没有主键。解决办法:

给视图创建联合主键,具体操作如下:

1)创建一个包含联合主键的类,并在类上注释@Embeddable

/**
* user_role视图的联合主键
*/
@Embeddable
public class UserRoleCompositeId implements Serializable{
    private static final long serialVersionUID = -3304319243957837925L;

    @Column(name = "userid")
    int userid;
    @Column(name = "sysid")
    int sysid;
    @Column(name = "sysname")
    String sysname;

    public int getUserid() {
        return userid;
    }

    public void setUserid(int userid) {
        this.userid = userid;
    }

    public int getSysid() {
        return sysid;
    }

    public void setSysid(int sysid) {
        this.sysid = sysid;
    }

    public String getSysname() {
        return sysname;
    }

    public void setSysname(String sysname) {
        this.sysname = sysname;
    }

    @Override
    public boolean equals(Object o) {
        if(o instanceof UserRoleCompositeId){
            UserRoleCompositeId key = (UserRoleCompositeId)o ;
            if(this.userid == key.userid && this.sysname.equals(key.sysname) && this.sysid==key.sysid){
                return true ;
            }
        }
        return false ;
    }

    @Override
    public int hashCode() {
        return this.sysname.hashCode();
    }
}

2)在entity类中引用联合主键,并在引用上注解@Id

@Entity
@Table(name = "user_role")
public class UserRoleView {

    @Column(name = "systype")
    String systype;
    @Column(name = "perkey")
    String perkey;

    @Id
    private UserRoleCompositeId userRoleCompositeId;

    public UserRoleCompositeId getUserRoleCompositeId() {
        return userRoleCompositeId;
    }

    public void setUserRoleCompositeId(UserRoleCompositeId userRoleCompositeId) {
        this.userRoleCompositeId = userRoleCompositeId;
    }

    public String getSystype() {
        return systype;
    }

    public void setSystype(String systype) {
        this.systype = systype;
    }

    public String getPerkey() {
        return perkey;
    }

    public void setPerkey(String perkey) {
        this.perkey = perkey;
    }
}

问题即可得到完美解决

猜你喜欢

转载自my.oschina.net/u/3316877/blog/1503837