Hibernate 自定義主鍵

snow0613發表於2009-02-25
我的想法是這樣的:

有一個抽象類: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修改過]

相關文章