Hibernate 自定义主键
我的想法是这样的:
有一个抽象类:GenericEntity,有两个抽象方法:getPrimaryKey(),setPrimaryKey(PrimaryKey primaryKey)。其中PrimaryKey是我自定义的主键类。项目中所有需要持久化的类都必须继承GenericEntity。
那如果我采用hibernate的方式,应该怎么做?
另外,我还想做一个KeyGenerator,可以根据不同的实体自动生成主键,但是这个主键生成器的问题就比较多,不知道大家有什么建议不。
以下是我的代码:
/**
* GenericEntity
*/
public abstract class GenericEntity implements Serializable {
public abstract PrimaryKey getPrimaryKey();
public abstract void setPrimaryKey(PrimaryKey primaryKey);
}
/**
* PrimaryKey
*/
public class PrimaryKey implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Class<? extends Serializable> type;
private String value;
/** Default Constructor */
public PrimaryKey() {}
/** Full Constructor */
public PrimaryKey(Class<? extends Serializable> type, String value) {
this.type = type;
this.value = value;
}
/**
* @return the type
*/
public Class<? extends Serializable> getType() {
return type;
}
/**
* @param type
* the type to set
*/
public void setType(Class<? extends Serializable> type) {
this.type = type;
}
/**
* @return the value
*/
public String getValue() {
return value;
}
/**
* @param value
* the value to set
*/
public void setValue(String value) {
this.value = value;
}
/**
* @param obj
* @return
* @see java.lang.Objectequals(java.lang.Object)
*/
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj instanceof PrimaryKey) { // null instanceof PrimaryKey is false
PrimaryKey pk = (PrimaryKey) obj;
Class<? extends Serializable> pkType = pk.type;
String pkValue = pk.value;
if (MathHelper.compareTo(this.type, pkType) && (MathHelper.compareTo(this.value, pkValue))) return true;
}
return false;
}
/**
* @return
* @see java.lang.ObjecttoString()
*/
public String toString() {
StringBuffer message = new StringBuffer();
message.append("[Type]:");
message.append(this.type);
message.append("\n");
message.append("[Value]:");
message.append(this.value);
return message.toString();
}
}
/**
* PrimaryKeyGenerator
*/
public interface PrimaryKeyGenerator {
public PrimaryKey generate();
}
[该贴被snow0613于2009-02-25 10:14修改过]
[该贴被admin于2009-02-25 18:44修改过]