gpt4 book ai didi

java - hibernate - 如何 JoinColumn 一个 EmbeddedId

转载 作者:搜寻专家 更新时间:2023-11-01 01:12:41 25 4
gpt4 key购买 nike

情况:我有一个 masterDB 和一个 library1DB 和 library2DB。

library1DB 和 library2DB 是两个独立的数据库,但具有相同的架构,因为每个图书馆都必须有自己的数据库。现在我们有了一个 masterDB,这是所有库(library1DB 和 library2DB)中所有数据的聚合版本,仍然记下它们各自的 ID 并将它们映射到它们的库 ID。

这里是我希望结构化的表:书- book_id- library_id- 标题- shelf_id架子- shelf_id- library_id- book_id- 描述

我有这些模型:

@Entity
public class Book {

@EmbeddedId
private BookKey bookKey;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "SHELF_ID", referencedColumnName = "SHELF_ID"),
@JoinColumn(name = "LIBRARY_ID", referencedColumnName = "LIBRARY_ID")
})
private ObjectA objectA;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "ANOTHER_ID", referencedColumnName = "ANOTHER_ID"),
@JoinColumn(name = "LIBRARY_ID", referencedColumnName = "LIBRARY_ID")
})
private ObjectB objectB;

@Column
private String title;

}

@Embeddable
public class BookKey implements Serializable {
@Column(name = "BOOK_ID")
private long bookId;
@Column(name = "LIBRARY_ID")
private long libraryId;
}

但是我得到了这个异常(exception):

Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: Book column: library_id (should be mapped with insert="false" update="false")

我试过使用@IdClass 而不是@Embeddable 和@EmbeddedId,我得到了这个:

Caused by: org.hibernate.DuplicateMappingException:  Table [book] contains physical column name [libraryId] represented by different logical column names: [libraryId], [LIBRARY_ID]

有什么帮助吗?

谢谢!

最佳答案

您应该为第二个映射列 library_id 添加 insert="false", update="false"。试试这个:

@JoinColumn(name = "LIBRARY_ID", referencedColumnName = "LIBRARY_ID",
insertable = false, updatable = false)

关于java - hibernate - 如何 JoinColumn 一个 EmbeddedId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26626920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com