Исключение отображения иностранных ключей в Hibernate: несоответствие столбцовJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Исключение отображения иностранных ключей в Hibernate: несоответствие столбцов

Сообщение Anonymous »

У меня есть две таблицы SQL с составными первичными и иностранными ключами, и я использую Hibernate для управления объектами и их взаимосвязи между этими таблицами. Тем не менее, я сталкиваюсь с следующим исключением при попытке запустить приложение: < /p>
Исключение: < /p>
Caused by: org.hibernate.MappingException: Foreign key (FK84h43wmylqljie636t5tprjqv:PRODUCT_DETAIL [PRODUCT_PARTITION_DATE,ID_PRODUCT])) must have same number of columns as the referenced primary key (PRODUCT [ID])
at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:149)
at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:131)
at org.hibernate.boot.internal.InProductMetadataCollectorImpl.secondPassCompileForeignKeys(InProductMetadataCollectorImpl.java:1856)
at org.hibernate.boot.internal.InProductMetadataCollectorImpl.secondPassCompileForeignKeys(InProductMetadataCollectorImpl.java:1772)
at org.hibernate.boot.internal.InProductMetadataCollectorImpl.processSecondPasses(InProductMetadataCollectorImpl.java:1633)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:295)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1460)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1494)
< /code>
Вот структура моих таблиц SQL, продукта и продукта_detail:
Продукт таблицы: < /p>
CREATE TABLE IF NOT EXISTS company_inventory.product
(
product_id bigint NOT NULL,
product_partition_date timestamp without time zone NOT NULL,
CONSTRAINT product_pkey PRIMARY KEY (product_id, product_partition_date),
-- other fields...
);
< /code>
table product_detail (modified): < /p>
CREATE TABLE IF NOT EXISTS company_inventory.product_detail
(
detail_id bigint NOT NULL,
product_id bigint,
product_partition_date timestamp without time zone,
detail_partition_date timestamp without time zone NOT NULL,
CONSTRAINT product_detail_pkey PRIMARY KEY (detail_id, detail_partition_date),
CONSTRAINT product_detail_fk1 FOREIGN KEY (product_id, product_partition_date) references product (product_id, product_partition_date),
-- other fields...
);
< /code>
java entities: < /p>
Class ProductId:
@Getter
@Setter
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@Embeddable
public class ProductId implements Serializable {
private Long productId;
private Date productPartitionDate;
}
< /code>
Продукт объекта: < /p>
@Entity
@Table(name = "PRODUCT")
@IdClass(ProductId.class)
@RequiredArgsConstructor
public class Product extends BaseEntity implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_PRODUCT")
@SequenceGenerator(name = "SEQ_PRODUCT", sequenceName = "SEQ_PRODUCT", allocationSize = 1)
@Column(name = "PRODUCT_ID")
private Long productId;

@Id
@Temporal(TemporalType.DATE)
@Column(name = "PRODUCT_PARTITION_DATE", nullable = false)
private Date productPartitionDate;

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "product")
private List
productDetailList;

@Embedded
private ProductKey productKey;
// other fields
}
< /code>
класс ProductDetailId: < /p>
@Getter
@Setter
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@Embeddable
public class ProductDetailId implements Serializable {
private Long detailId;
private Date detailPartitionDate;
}
< /code>
Entity ProductDetail: < /p>
@Entity
@Table(name = "PRODUCT_DETAIL")
@IdClass(ProductDetailId.class)
@Getter
@Setter
public class ProductDetail extends BaseEntity implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_PRODUCT_DETAIL")
@SequenceGenerator(name = "SEQ_PRODUCT_DETAIL", sequenceName = "SEQ_PRODUCT_DETAIL", allocationSize = 1)
@Column(name = "DETAIL_ID")
private Long detailId;

@Id
@Temporal(TemporalType.DATE)
@Column(name = "DETAIL_PARTITION_DATE", nullable = false)
private Date detailPartitionDate;

@ManyToOne
@JoinColumns({
@JoinColumn(name = "product_id", referencedColumnName = "product_id"),
@JoinColumn(name = "product_partition_date", referencedColumnName = "product_partition_date")
})
private Product product;

// other fields
}
< /code>
Я в настоящее время застрял в этой проблеме. Я искал везде для решения, но проблема сохраняется


Подробнее здесь: https://stackoverflow.com/questions/794 ... n-mismatch
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»