我在Hibernate中遇到了複合主鍵問題。休眠。通用複合PK問題
實施例:
我有代表的這樣的所有實例基地主鍵的類。
public abstract class PrimaryKey implements Serializable { /* ... */ }
它只是實現java.io.Serializable接口,並且可以在仿製藥或其他類的方法作爲參數一起使用,以縮小公認的班。
另一個主鍵類應繼承它並將您的特定字段添加爲鍵。例如:
public class PassportPK extends PrimaryKey {
private String number;
private String series;
public PassportPK() {}
public PassportPK(String number, String series) {
this.number = number;
this.series = series;
}
// Getters/setters are below.
}
那麼它在適當的實體像這樣使用:
@Entity
@Table(name = "T_PASSPORTS")
@IdClass(PassportPK.class)
public class Passport implements Serializable {
@Id
@Column(name = "F_NUMBER")
private String number;
@Id
@Column(name = "F_SERIES")
private String series;
public Passport() {}
// Getters/setters are below.
}
一切工作正常,如果我有這樣的實體交易。
但在我的項目的一些實體有這樣的int,long,串一個簡單的主鍵,等
在這種情況下,我想有這樣一個通用的主鍵:
public class SimplePK<T extends Serializable> extends PrimaryKey {
/**
* Represents a simple key field of entity (i.e. int, long, String, ...);
*/
private T id;
public SimplePK() {}
public SimplePK(T id) {
this.id = id;
}
public T getId() {
return this.id;
}
public void setId(T id) {
this.id = id;
}
}
問題:如何在註解映射中解決它?
p.s.當我試圖解決它像前面的例子(通過@IdClass(SimplePK.class中)我趕上"org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [application-context.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Property com.testprj.entity.SimplePK.id has an unbound type and no explicit target entity. Resolve this Generic usage issue or set an explicit target attribute (eg @OneToMany(target=) or use an explicit @Type"
例外。
PPS我用配線組件Spring框架Hibernate的。
我會感謝任何幫助!
我找到了解決方案:現在,我使用'@我的「通用」 -primary鍵的表示Embeddable'類(繼承主鍵基類) ,並在實體中指定其類型。將抽象的「PrimaryKey」類保存爲所有主鍵實例的基礎非常重要。 – Pasha190