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修改过]

banq老大不在吗?
[该贴被snow0613于2009-02-25 17:14修改过]

虽然Hibernate提供自定义主键,但是按照Evans DDD建模的模型都必须有自己主键,所以,几乎我不去碰Hibernate自定义主键这趟浑水。帮不了你了

TO:banq,
那我们就暂且不讨论hibernate,先说一下我这样的思路有没有问题?(我指的是设计PrimaryKey这个类)