У меня проблема с составным первичным ключом в спящем режиме.Hibernate. Generic Composite PK issue
Пример:
У меня есть класс, который представляет базовый первичный ключ для всех экземпляров этого.
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.
}
Все работает нормально, если у меня есть контракт с лицами, как это.
Но некоторые лица в моем проекте есть простой первичный ключ, как межды, длинные, 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;
}
}
ВОПРОС: Как я могу разрешить это путем сопоставления аннотаций?
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"
исключение.
ПФС Я использую Hibernate с Spring Framework для компонентов проводки.
Я бы благодарны за любую помощь!
Я нашел решение: Теперь я использую '@ класса Embeddable' для представления моего примарного ключа«Generic»(который наследует первичный ключ базового класса) , и укажите его тип в объектах. Очень важно сохранить абстрактный класс «PrimaryKey» как базу для всех экземпляров первичного ключа. – Pasha190