[英]Hibernate. Generic Composite PK issue
我在Hibernate中使用复合主键时遇到问题。
例:
我有一个代表该类所有实例的基本主键的类。
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,String等。
在这种情况下,我想拥有一个像这样的通用主键:
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;
}
}
问题:如何以注释映射方式解决它?
ps当我尝试像上一个示例中一样解决它时(通过@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来连接组件。
我将不胜感激!
我认为您不能在id类中使用泛型类型。 使用@IdClass表示组合主键的类,如果只想使用一个属性(如主键),则必须在声明中使用@Id并删除@IdClass。
例:
@Entity
@Table(name = "T_PASSPORTS")
public class Passport implements Serializable {
@Id
private String id; //Or int, long...
public Passport() {}
// Getters/setters are below.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.