Моя основная таблица имеет составной первичный ключ, где одно из полей является последовательностью.Он имеет отношение один к одному с двумя другими таблицами, где составной ключ является первичным / внешним ключом этих соответствующих таблиц.В моем коде Java у меня есть класс PK, который содержит @SequenceGenerator
.Поскольку столбцы разделены между таблицами, я попытался, чтобы все мои сущности использовали один и тот же класс PK.Однако, поскольку в моем классе PK есть поле с @SequenceGenerator
, всякий раз, когда я пытаюсь вставить его в таблицы внешнего ключа, hibernate генерирует дополнительную последовательность и завершается с ошибкой при вставке из-за отсутствия родительского ключа.
Так как @SequenceGenerator
генерировал дополнительную последовательность для последующих вставок в другие таблицы, я клонировал свой класс PK для каждой другой таблицы и удалил @SequenceGenerator
, чтобы столбцы были одинаковыми, и Hibernate не будет генерироватьновая последовательность во время вставки.Это, однако, создало еще одну проблему, когда hibernate ожидает другой класс PK, чем тот, который предоставляется.
public class AddrEntityPK implements Serializable {
@Id
private long addrTyId;
@SequenceGenerator(name = "ADDR_SEQ", sequenceName = "ADDR_SEQ", allocationSize = 1)
@GeneratedValue(generator = "ADDR_SEQ")
private long addrSeqNum;
}
public class PhoneEntityPK implements Serializable {
@Id
private long addrTyId;
@Id
private long addrSeqNum;
}
public class ElecrMailEntityPK implements Serializable {
@Id
private long addrTyId;
@Id
private long addrSeqNum;
}
@Entity
@IdClass(AddrEntityPK.class)
public class AddrEntity {}
@Entity
@IdClass(PhoneEntityPK.class)
public class PhoneEntity {}
@Entity
@IdClass(ElecrMailEntityPK.class)
public class ElecrMailEntity {}
Поскольку имена столбцов совпадают, я бы ожидал, что hibernate не сгенерирует исключение, а вместо этого выдает org.hibernate.TypeMismatchException: Provide id of the wrong type for class AddrEntity. Expected AddrEntityPK, got class PhoneEntityPK