Hibernate 自定义主键

09-02-25 snow0613
我的想法是这样的:

有一个抽象类: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.Object#equals(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.Object#toString()

*/

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

    

snow0613
2009-02-25 10:23
banq老大不在吗?

[该贴被snow0613于2009-02-25 17:14修改过]

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

snow0613
2009-02-25 20:51
TO:banq,

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

猜你喜欢