您的位置:首页 > 其它

hibernate视图无主键解决办法

2017-08-07 00:00 651 查看
摘要: No identifier specified for entity解决

使用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;
}
}

问题即可得到完美解决
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐