hibernate实体继承问题(派生类重写基类某属性的get方法)
本帖最后由 auditionlsl 于 2011-07-08 14:09:28 编辑 hibernate的所有实体类的主键均继承一个基类IdEntity,基类如下:
/**
* 统一定义id的entity基类.
* @author MingDao
*/
// JPA基类标识
@MappedSuperclass
public abstract class IdEntity
{
protected Long id;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
}
/**
* 系统用户实体
*/
@Entity
@Table(name = "SYS_USER")
public class User extends IdEntity
{
private String name;
private String account;
private String password;
@Column(name = "USER_NAME")
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
@Column(name = "USER_ACCOUNT")
public String getAccount()
{
return account;
}
public void setAccount(String account)
{
this.account = account;
}
@Column(name = "USER_PASSWORD")
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
}
/**
* 客户类型实体类
*/
@Entity
@Table(name="HHS_CLIENTTYPE")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class ClientType extends IdEntity implements Serializable
{
private static final long serialVersionUID = 4005802016130232896L;
private String clntpCode; //客户类别编码
private String clntpName; //客户类别名称
@Id
@Column(name="CLNTP_ID")
@Override
public Long getId()
{
return super.getId();
}
@Column(name="CLNTP_CODE")
public String getClntpCode()
{
return clntpCode;
}
public void setClntpCode(String clntpCode)
{
this.clntpCode = clntpCode;
}
@Column(name="CLNTP_NAME")
public String getClntpName()
{
return clntpName;
}
public void setClntpName(String clntpName)
{
this.clntpName = clntpName;
}
}
@MappedSuperclass
public class BaseModel {
@Id
@Column(name = "keyId")
private int bId;
@Entity
@Table(name = "mybatis3_author")
@AttributeOverride( name="bId", column = @Column(name="id") )
@BatchSize(size = 10)
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
public class Authors extends BaseModel implements Serializable {
@Entity
@Table(name = "mybatis3_author")
@AttributeOverride( name="bId", column = @Column(name="id") )
@BatchSize(size = 10)
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
public class Authors extends BaseModel implements Serializable {
private static final long serialVersionUID = -4916783193566040682L;
@Id
private int id;
from Authors where bId = ?
from Authors where id = ?
均生成
Hibernate: select authors0_.id as id0_, authors0_.age as age0_, authors0_.loginDate as loginDate0_, authors0_.name as name0_ from mybatis3_author authors0_ where authors0_.id=?