最近的项目中有几种用户,用户的字段差别极大,只有id、username、password、userType、name等几个相同的字段,现想做单点登录,采用视图方式,现在针对上面几个字段创建了一个普通视图,命名为View_User,没有主键。
然后用MyEclipse的反射工程生成Annotation配置的实体类,共生成两个实体类,如下:
ViewUser类
package com.ninemax.cul.user.entity;
import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
* ViewUser entity. @author MyEclipse Persistence Tools
*/
@Entity
@Table(name = "VIEW_USER")
public class ViewUser implements java.io.Serializable {
// Fields
private ViewUserId id;
// Constructors
/** default constructor */
public ViewUser() {
}
/** full constructor */
public ViewUser(ViewUserId id) {
this.id = id;
}
// Property accessors
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "id", column = @Column(name = "ID", length = 50)),
@AttributeOverride(name = "username", column = @Column(name = "USERNAME", length = 32)),
@AttributeOverride(name = "password", column = @Column(name = "PASSWORD", length = 32)),
@AttributeOverride(name = "userType", column = @Column(name = "USER_TYPE")),
@AttributeOverride(name = "name", column = @Column(name = "NAME", length = 65536)),
@AttributeOverride(name = "isWorkFlag", column = @Column(name = "IS_WORK_FLAG")) })
public ViewUserId getId() {
return this.id;
}
public void setId(ViewUserId id) {
this.id = id;
}
}
另外一个类是ViewUserId类:
package com.ninemax.cul.user.entity;
import javax.persistence.Column;
import javax.persistence.Embeddable;
/**
* ViewUserId entity. @author MyEclipse Persistence Tools
*/
@Embeddable
public class ViewUserId implements java.io.Serializable {
// Fields
private String id;
private String username;
private String password;
private Integer userType;
private String name;
private Boolean isWorkFlag;
// Constructors
/** default constructor */
public ViewUserId() {
}
/** full constructor */
public ViewUserId(String id, String username, String password,
Integer userType, String name, Boolean isWorkFlag) {
this.id = id;
this.username = username;
this.password = password;
this.userType = userType;
this.name = name;
this.isWorkFlag = isWorkFlag;
}
// Property accessors
@Column(name = "ID", length = 50)
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
@Column(name = "USERNAME", length = 32)
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(name = "PASSWORD", length = 32)
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
@Column(name = "USER_TYPE")
public Integer getUserType() {
return this.userType;
}
public void setUserType(Integer userType) {
this.userType = userType;
}
@Column(name = "NAME", length = 65536)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "IS_WORK_FLAG")
public Boolean getIsWorkFlag() {
return this.isWorkFlag;
}
public void setIsWorkFlag(Boolean isWorkFlag) {
this.isWorkFlag = isWorkFlag;
}
public boolean equals(Object other) {
// 省略
}
public int hashCode() {
// 省略
}
}
其实这样程序是可以运行的,问题在于视图中的name是可以为空的,在name为空时Hibernate加载不上来数据(为null),请问怎样才能让Hibernate将含有null字段值的记录也加载上来?
网上有人介绍XML配置的解决方式,但我经验不足,没有参照着将Annotation下的解决办法找到,请各位指点一下,谢谢!